我正在玩一些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和英语:)
最合适的回答,由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>
, 他们很快就会感到沮丧,或者完全离开你的代码。