2012-09-18 90 views
1

因此,另一個嵌套的shortcodes問題。 我有兩個簡碼:[幻燈片]和[prg]。它們都包含簡碼。 [prg]嵌套在[幻燈片]中。但[prg]不解釋。 這兩個簡碼很好地分開工作。 我知道do_shortcode()函數,但它似乎不工作,我不知道爲什麼。即使使用do_shortcode()函數,WordPress嵌套Shortcodes也不起作用

下面是我寫的代碼:

add_action('init', 'register_shortcodes'); 

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

    $post_title = get_the_title($post->ID); 
    $wrap = '<div class="slide slide-'.$num.'"><h1 class="h2-like projet_title">'.$post_title.'</h1>'.$content.'</div>'; 
    return $wrap; 
} 

function wrap_paragraph($atts, $content = null) 
{ 
    $content = do_shortcode($content); //I've tried several solutions but none've worked. 
    return '<p>'.$content.'</p>'; 
} 

function register_shortcodes(){ 
    add_shortcode('slide', 'make_slide'); 
    add_shortcode('prg', 'wrap_paragraph'); 
} 

而且這裏是我的HTML編輯器後(自定義職位類型)的內容:

[slide num="1"]<img title="4a6c2a605946a_1080x733" src="http://localhost:8888/labs/noway/wordpress_1/wp-content/uploads/2012/09/4a6c2a605946a_1080x733-460x312.jpg" alt="4a6c2a605946a_1080x733" width="460" height="312" /> 

[prg]Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa.[/prg][/slide] 

我讀過幾個職位在這個網站和其他網站,如sitepoint.com和speckyboy.com,以及the wordpress codex,但答案不適合我。 也許這只是因爲我沒有在我的function.php文件中實現shortcodes正確的方式?

如果有人能幫助我?我真的想知道是什麼讓它無法正常工作。提前致謝。 對不起,我的英語不好,我希望我能理解。

編輯 我stupidely驗證我的意見整理之前,所以它是:

喜@maiorano並非常感謝您的幫助,它的工作完美。 但是,即使您的代碼真的很好,我仍然無法使用它,因爲我需要直接從媒體庫中獲取圖片,儘可能減少人爲干預MCE編輯器。但它使我學會了一種虔誠的方式去。

另外我已經測試過使用do_shortcode進入頂級短代碼,但它產生了一個奇怪的結果:我的< p>被驅逐出了< div>,所以我感到困惑。

所以看起來阻塞我的是頂級do_shortcode-ish的組合,也許我的add_shortcode()是在短代碼之後聲明的。

回答

1

問題是您的頂層shortocde「[幻燈片]」的內容未執行do_shortcode()。幾點提示:

我建議將圖片屬性包含爲短代碼屬性,因爲它可以減少標記的數量併爲您提供定義默認值的功能。

您也不需要在'init'回調中定義您的簡碼。它能夠在全球範圍內進行:

add_shortcode('slide', 'make_slide'); 
add_shortcode('prg', 'wrap_paragraph'); 
function make_slide($atts, $content = null) 
{ 
    extract(shortcode_atts(array(
     'num' => 1, 
     'title' => false, 
     'src' => get_bloginfo('stylesheet_directory').'/images/notfound.jpg', //Default image if none provided 
     'alt' => false, 
     'width' => false, 
     'height' => false, 
    ), $atts)); 

    $title = $title ? " title=\"$title\"" : ''; 
    $alt = $alt ? " alt=\"$alt\"" : ''; 
    $width = $width ? " width=\"$width\"" : ''; 
    $height = $height ? " height=\"$height\"" : ''; 

    $img = "<img src=\"$src\"".$title.$alt.$width.$height." />"; 

    $post_title = get_the_title($post->ID); 
    $wrap = '<div class="slide slide-'.$num.'"><h1 class="h2-like projet_title">'.$post_title.'</h1>'.$img.do_shortcode($content).'</div>'; 
    return $wrap; 
} 

function wrap_paragraph($atts, $content = null) 
{ 
    $content = do_shortcode($content); //This is fine if you plan on nesting shortcode within this callback 
    return '<p>'.$content.'</p>'; 
} 

利用這一點,我可以添加的內容:

[slide num="1" title="4a6c2a605946a_1080x733" src="http://localhost:8888/labs/noway/wordpress_1/wp-content/uploads/2012/09/4a6c2a605946a_1080x733-460x312.jpg" alt="4a6c2a605946a_1080x733" width="460" height="312"][prg]Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa.[/prg][/slide] 

並獲得:

<div class="slide slide-1"><h1 class="h2-like projet_title">Hello world!</h1><img width="460" height="312" alt="4a6c2a605946a_1080x733" title="4a6c2a605946a_1080x733" src="http://localhost:8888/labs/noway/wordpress_1/wp-content/uploads/2012/09/4a6c2a605946a_1080x733-460x312.jpg"><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa.</p></div> 
+0

喜@maiorano並感謝了很多你的幫助,它的工作完美。但是,即使你的代碼真的很好,我也不會使用它,因爲我需要直接從媒體庫中獲取圖片,儘可能少地人爲干預MCE編輯器 –

+0

這很好,它主要是建議。很高興我能幫上忙。 – maiorano84

+1

你幫了很多人。 Thx再次。 :-) –

相關問題