短码中的短码有问题

时间:2011-02-28 作者:PHearst

我在函数中使用它。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>\';

1 个回复
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() 打电话看看效果如何。如果这破坏了其他东西,那么试试上面的方法?

结束

相关推荐

Nested Shortcode Detection

如果您熟悉此代码<?php $pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { //shortcode is being used }&#