3

我已经安装了 _s 主题并且几乎没有开始使用它。

我正在尝试将名为“”的简码嵌套在名为“ b”的简码中cb.这是我的代码(来自functions.php文件):

// Short Code
function box_shortcode( $atts, $content = null ) {
  extract(
      shortcode_atts(array(
          's' => '1'
          ), $atts));

  if($s == '1') { $box_classes = 'c1_4 aside'; }
  if($s == '2') { $box_classes = 'c2_4 main'; }
  if($s == '3') { $box_classes = 'c3_4'; }
  if($s == '4') { $box_classes = 'c4_4'; }

  return '<section class="' . $box_classes . '">' . $content . '</section>';
}
add_shortcode( 'b', 'box_shortcode' );

function contentblock_shortcode( $content = null ) {
  return '<div class="inner">' . do_shortcode($content) . '</div>';
}
add_shortcode( 'cb', 'contentblock_shortcode' );

add_filter('the_content', 'do_shortcode');
4

2 回答 2

2
add_filter('the_content', 'do_shortcode');

不需要。

您的两者都应该将 atts 和 content 作为属性,并且您的 OUTER(不是内部)函数应该有一个do_shortcode内部。最终代码应该是这样的:

function box_shortcode( $atts, $content = null ) {
  extract(
      shortcode_atts(array(
          's' => '1'
          ), $atts));

  if($s == '1') { $box_classes = 'c1_4 aside'; }
  if($s == '2') { $box_classes = 'c2_4 main'; }
  if($s == '3') { $box_classes = 'c3_4'; }
  if($s == '4') { $box_classes = 'c4_4'; }

  return '<section class="' . $box_classes . '">' . $content . '</section>';
}
add_shortcode( 'b', 'box_shortcode' );

function contentblock_shortcode( $atts, $content = null ) {
  return '<div class="inner">' . do_shortcode($content) . '</div>';
}
add_shortcode( 'cb', 'contentblock_shortcode' );

如果您将使用您的短代码,[cb][b]content[/b][/cb] 如果您想以相反的方式使用它们,请移至do_shortcode($content)该功能box_shortcode( $atts, $content = null )

于 2012-12-07T17:10:32.173 回答
0

我相信问题是你的contentblock_shortcode函数$content作为它的第一个参数,而它应该是第一个参数$atts。将其更改为function contentblock_shortcode($atts, $content = null)应该允许内部do_shortcode仅将内容传递给do_shortcode内部部分中的方法。

于 2012-12-07T16:48:03.290 回答