区分相同类型的不同小部件

时间:2012-02-12 作者:Marcos

我正在玩一些wordpress小部件,我尝试这样做:

我创建了一个侧栏和一个小部件来显示包含最新帖子的滑块。jQuery加载器是这样的:

jQuery(\'#slider-wrap-id\').mySlider({
    //args
});
好的,如果用户包括侧边栏的一个滑块,就不会有问题。但如果two sliders or more 由于滑块包装具有相同的id,因此存在问题。

<div id="slider-wrap-id">
    <!--slides-->
</div>
我目前的建议如下:

在widget函数中,我创建了一个带有参数的钩子来加载这样的滑块。

Note: 伪代码

class Vi_Posts_Slider_Widget extends WP_Widget {

    function Pi_Posts_Slider_Widget() { 
        //register args 
    }

    //the key function to solve my problem, maybe :)
    function widget( $args, $instance ) {
        //extract, WP_Query to retrive posts ...
        //ok now the key, I want to define slider id dynamically
        <div id="$id"></div>
        //finally generate hook to load slider
        do_action(\'vi_posts_slider_widget\', array(......, \'slider_id\' => $sid ) );
    }

    // update and form functions
}

//load individual sliders with diferent id and arguments
function vi_load_slider($sldier_opts){
    <script type="text/javascript">
        jQuery(\'<?php echo $sldier_opts[\'id\'] ?>\').mySlider({
            //args using $slider_opts
        });
    </script>
} 
add_action(\'vi_posts_slider_widget\', \'vi_load_slider\');
我需要的唯一理由是current widget id. 例如,当我注册我创建的边栏时,如下所示:

register_sidebar(array(
    \'name\' => __(\'Default Sidebar\', "theme_textdomain"),
    \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
    // $s provide the single id
    //............
));
通过这种方式,结果如下所示。

<div id="sample-widget-1">
<div id="sample-widget-2">
.......
我正试图找到相同的方法来定义唯一的滑块id。如果你有任何建议或建议,请将我推向正确的方向。

PD: 很抱歉我的英语,我正在同时学习WordPress和英语:)

1 个回复
最合适的回答,由SO网友:mor7ifer 整理而成

正确的做法是$args[\'before_widget]$args[\'after_widget\'] 来处理id、类和其他任何内容。在伪代码中:

class My_Widget extends WP_Widget {
    function My_Widget() {

        //basic widget settings.
        $widget_ops = array(
            \'classname\'   => \'my-name\',
            \'description\' => \'This is the description\'
        );

        //widget control settings.
        $control_ops = array(
            \'id_base\' => \'my-name-widget\'
        );

        //create widget
        $this->WP_Widget( \'my-name-widget\', \'Widget Title\', $widget_ops, $control_ops );

    }
    function widget( $args, $instance ) {

        // split $args
        extract( $args );

        /* Our variables from the widget settings. */
        $title = apply_filters( \'widget_title\', $instance[\'title\'] );
        //apply any additional settings here

        /* Before widget (defined by themes). */
        echo $before_widget;

        /* Display the widget title if one was input (before and after defined by themes). */
        if( $title )
            echo $before_title . $title . $after_title;

        // do all the widget output

        /* After widget (defined by themes). */
        echo $after_widget;
    }
}
如果你还是有点困惑,print_r() $args 你会看到你所拥有的一切。如果你还不明白,Justin Tadlock has a great guide 这将使你朝着正确的方向前进。

使用$before_widget$after_widget 因为如果有人在<li>你已经硬编码了<divs>, 他们很快就会感到沮丧,或者完全离开你的代码。

结束

相关推荐

Remove the Inactive Widgets

我正在寻找一个函数,而不是插件,它允许我删除不活动的小部件。。。之前有个话题Script to remove all inactive widgets? 有了答案,但这对我不起作用。还有其他解决方案吗?当做