如何在嵌套的短代码中获取属性?

时间:2011-12-14 00:42:17

标签: php wordpress shortcode

我正在为我的Wordpress主题创建幻灯片短代码,但遇到了一个小问题。这就是短代码的样子:

[slideshow width=500]
    [slide]http://example.com/image1.jpg[/slide]
    [slide]http://example.com/image2.jpg[/slide]
    [slide]http://example.com/image3.jpg[/slide]
[/slideshow]

所以,基本上它是两个不同的短代码(幻灯片和幻灯片),我需要设置每个“幻灯片”短代码的宽度。如何从父“幻灯片”短代码中获取“width”属性并将其传递给每个子“幻灯片”?

    //Create slideshow wrapper div
    function shortcode_slideshow($atts, $content = null){  
        $return = '<div class="slideshow">';
        $return .= do_shortcode($content); 
        $return .= '</div><!-- end slideshow -->'; 

        return $return; 
    } 

    //Create each slide HTML 
    function shortcode_slide($atts, $content = null){
        $return = '<a class="dolightbox" href="'.$content.'">'; 
        $return .= '<img src="'.$content.'" /></a>'; 
        return $return; 
    }

    add_shortcode('slideshow', 'shortcode_slideshow');
    add_shortcode('slide', 'shortcode_slide');

1 个答案:

答案 0 :(得分:1)

使用全局变量将值传递给第二个短代码函数。我想也许有一个原生的Wordpress方法,但我显然没有。

//Create slideshow wrapper div
$globalWidth = NULL; 

function shortcode_slideshow($atts, $content = null){ 
    extract(shortcode_atts( array('width' => ''), $atts));
    global $globalWidth;
    $return = '<div class="slideshow">';
    $return .= do_shortcode($content); 
    $return .= '</div><!-- end slideshow -->'; 

    return $return; 
} 

//Create each slide HTML 
function shortcode_slide($atts, $content = null){
    global $globalWidth;
    $return = '<img width="'.$globalWidth.'" src="'.$content.'" />'; 

    return $return; 
}

add_shortcode('slideshow', 'shortcode_slideshow');
add_shortcode('slide', 'shortcode_slide');