我在函数中使用它。php文件来格式化一些jQuery UI选项卡的短代码,但是我也使用了一个短标记来引用我的视频嵌入,当它们在UI选项卡中时会中断。
我的问题是,我如何在不改变的情况下通过此函数传递视频短代码:
// jQuery UI Tabs
add_shortcode( \'tabgroup\', \'etdc_tab_group\' );
function etdc_tab_group( $atts, $content ){
$GLOBALS[\'tab_count\'] = 0;
do_shortcode( $content );
if( is_array( $GLOBALS[\'tabs\'] ) ){
foreach( $GLOBALS[\'tabs\'] as $tab ){
$tabs[] = \'<li><a class="" href="#\'.$tab[\'title\'].\'">\'.$tab[\'title\'].\'</a></li>\';
$panes[] = \'<div id="\'.$tab[\'title\'].\'"><h3>\'.$tab[\'title\'].\'</h3>\'.$tab[\'content\'].\'</div>\';
}
$return = "\\n".\'<!-- the tabs --><div id="tabs"><ul>\'.implode( "\\n", $tabs ).\'</ul>\'."\\n".\'<!-- tab "panes" -->\'.implode( "\\n", $panes ).\'</div>\'."\\n";
}
return $return;
}
add_shortcode( \'tab\', \'etdc_tab\' );
function etdc_tab( $atts, $content ){
extract(shortcode_atts(array(
\'title\' => \'Tab %d\'
), $atts));
$x = $GLOBALS[\'tab_count\'];
$GLOBALS[\'tabs\'][$x] = array( \'title\' => sprintf( $title, $GLOBALS[\'tab_count\'] ), \'content\' => $content );
$GLOBALS[\'tab_count\']++;
}
我的视频短代码如下所示[视频src=”http://site.com/uploads/example.mp4“]。我想我只需要在$GLOBALS中设置一些内容,但我不知道如何将其原封不动地传递出去。
(我的“视频”短代码正在被另一个插件翻译)
更新:这是我问题的解决方案。正在添加do_shortcode
至$窗格:
$panes[] = \'<div id="\'.$tab[\'title\'].\'"><h3>\'.$tab[\'title\'].\'</h3>\'.do_shortcode($tab[\'content\']).\'</div>\';
SO网友:Dougal Campbell
这里有一个技巧wp-includes/media.php
用于embed
短代码:首先删除所有短代码,然后将特定的短代码添加回系统,过滤内容,然后重新注册原始短代码。
尝试以下操作:
function etdc_tab_group( $atts, $content ){
global $shortcode_tags;
$GLOBALS[\'tab_count\'] = 0;
// save the shortcode registrations
$orig_shortcode_tags = $shortcode_tags;
// remove them all
remove_all_shortcodes();
// add ours back in
add_shortcode( \'tab\', \'etdc_tab\' );
$content = do_shortcode( $content );
// restore original shortcodes
$shortcode_tags = $orig_shortcode_tags;
//...rest of the function...
}
事实上,现在我看到了
etdc_tab_group()
功能更紧密,我很惊讶它没有破坏某些东西。。。你是直接复制粘贴的,还是删掉了什么?因为它永远不会过去
$content
再次退出。
所以我要做的第一件事就是把do_shortcode()
打电话看看效果如何。如果这破坏了其他东西,那么试试上面的方法?