1

我正在尝试做一个简码,它将额外的 jQuery 脚本添加到wp_footer.

所以这将是一个示例短代码:

function partners($atts ) {
    global $extra_options, $pslider;
    extract(shortcode_atts(array(  
            'ids' => null,
            'extra_options' => null
        ), $atts));  

    $pslider = 'partners-slider'.rand(100,999);
    $ids = explode( ',', $ids );
    $output = '<div class="section row-one"><div class="col ps-gradient"><div class="ps-wrap"><div class="'.$pslider.'">';
    foreach($ids as $id) {    
    $img_attr = wp_get_attachment_image_src( $id, 'full' );
    $alt_text = get_post_meta( $id, '_wp_attachment_image_alt', true);
    $output .= '<div class="pslide"><a href="' . $alt_text . '"><img src="' . $img_attr[0] . '" /></a></div>';    
    }
    $output .= '</div></div></div></div>';
    return $output;  
}  

add_shortcode('partners', 'partners');

从上面的函数中,我需要获取变量并将它们放在一个 jQuery 脚本中:

function print_partners_scripts() {
    global $extra_options, $pslider;
    echo '<script type="text/javascript">' . "\n";
    echo 'jQuery(document).ready( function() {'. "\n";
    echo '  $(".'.$pslider.'").bxSlider({
        slideWidth: 924,
        auto: 1,
        autoStart: 1,
        moveSlides: 1,
        minSlides: 7,
        maxSlides: 8,
        pager: false,
        controls: false,
        slideMargin: 5,
        autoHover: true
        ' . $extra_options . '
        });' . "\n";
    echo '});' . "\n";
    echo '</script>' . "\n";
}

add_action( 'wp_footer', 'print_partners_scripts' );

好的,目前我有一个可以返回工作滑块的简码。

但是,如果我尝试在同一页面上再次使用此简码怎么办?我已经检查过了,jQuery 脚本只会追加一次。

我想为每个 [partners] 短代码生成这个 jQuery 脚本。

例如:

[partners extra_options="something: true"]
[partners extra_options="something: false"]

第一个应该将此脚本添加到wp_footer

<script type="text/javascript">
jQuery(document).ready( function() {
    $(".pslider342").bxSlider({
        slideWidth: 924,
        auto: 1,
        autoStart: 1,
        moveSlides: 1,
        minSlides: 7,
        maxSlides: 8,
        pager: false,
        controls: false,
        slideMargin: 5,
        autoHover: true,
        extra_options: true
    });
});
</script>

有效。
第二个应该添加具有不同变量的相同脚本:

<script type="text/javascript">
jQuery(document).ready( function() {
        $(".pslider456").bxSlider({
        slideWidth: 924,
        auto: 1,
        autoStart: 1,
        moveSlides: 1,
        minSlides: 7,
        maxSlides: 8,
        pager: false,
        controls: false,
        slideMargin: 5,
        autoHover: true,
        extra_options: false
    });
});
</script>

不幸的是,没有添加这个。

真的需要你的帮助!

4

1 回答 1

0
function print_partners_scripts() {
    global $pslider;
    foreach( $pslider as $id => $value ):
    echo '<script type="text/javascript">' . "\n";
    echo 'jQuery(document).ready( function() {'. "\n";
    echo '  $(".partners-slider-'.$id.'").bxSlider({
        slideWidth: 924,
        auto: 1,
        autoStart: 1,
        moveSlides: 1,
        minSlides: 7,
        maxSlides: 8,
        pager: false,
        controls: false,
        slideMargin: 5,
        autoHover: true,
        ' . $value . '
        });' . "\n";
    echo '});' . "\n";
    echo '</script>' . "\n";
    endforeach;
}

add_action( 'wp_footer', 'print_partners_scripts' );

function partners($atts ) {
    global $pslider;
    extract(shortcode_atts(array(  
            'ids' => null,
            'extra_options' => null
        ), $atts));  

    $unique_id = uniqid();
    $pslider[$unique_id] = $extra_options;
    $ids = explode( ',', $ids );
    $output = '<div class="section row-one"><div class="col ps-gradient"><div class="ps-wrap"><div class="partners-slider-'.$unique_id.'">';
    foreach($ids as $id) {    
    $img_attr = wp_get_attachment_image_src( $id, 'full' );
    $alt_text = get_post_meta( $id, '_wp_attachment_image_alt', true);
    $output .= '<div class="pslide"><a href="' . $alt_text . '"><img src="' . $img_attr[0] . '" /></a></div>';    
    }
    $output .= '</div></div></div></div>';
    return $output;  
}  

add_shortcode('partners', 'partners');
于 2013-10-17T01:58:17.947 回答