2012-12-07 27 views
3

我已經安裝了_s主題並且幾乎沒有開始處理它。在Wordpress結果中嵌套短碼不會打印出內部短碼

我試圖巢名爲「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'); 
+0

你可以添加一個例子你如何使用你的簡碼? –

回答

0

我認爲,問題是你的contentblock_shortcode函數接受$content作爲它的第一個論點,而它應該首先採用$atts。將其更改爲function contentblock_shortcode($atts, $content = null)應允許內部do_shortcode僅將內容傳遞給內部部分中的do_shortcode方法。

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)

+0

謝謝!奇蹟般有效。 – user1885873