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_shortcodedo_shortcode

于 2012-12-07T16:48:03.290 に答える