写这篇文章的目的,是因为在使用WP-MulticolLinks插件时,发现只能增加一个小工具(Widget)到工具栏。如下图,这样没有办法按照类别增加多列友链小工具。 于是对该插件做了修改,可以支持在后台拖动多个多列友情链接小工具。 以下是在插件中增加代码实现多列的方法:
注册我们的小工具,在widget界面初始化时可以在后台界面中增加我们的小工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29// 以下为在widgets界面初始化时,注册我们自己定义的小工具
function register_ex_widget() {
register_widget( 'EX_Widget' );
}
add_action( 'widgets_init', 'register_ex_widget' );
* 定义小工具的类,继承自WP_Widget,这个基类是可以创建多个实例的
// 自定小工具类,继承WP_Widget
class EX_Widget extends WP_Widget {
// 初始化设定,定义小工具的名字等基本信息
function EX_Widget() {
$widget_ops = array( 'classname' => 'side_ex', 'description' => '设定多列友情链接');
$control_ops = array( 'width' => 300, 'height' => 500, 'id_base' => 'side_ex-widget' );
$this->WP_Widget( 'side_ex-widget', '多列友情链接', $widget_ops, $control_ops );
}
// 小工具在工具栏显示的函数,之后介绍具体实现
function widget( $args, $instance ) {
}
// 更新Widget时执行该函数
function update( $new_instance, $old_instance ) {
return $instance;
}
// Widget菜单的显示时执行该函数
function form( $instance ) {
}
}widget函数实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30function widget( $args, $instance ) {
// 以上均为转化参数用于后续传递
$this_title = empty($instance['title']) ? __('Links', 'wp-multicollinks') : $instance['title'];
$orderbyParam = 'name';
if ($instance['orderby'] == 2) {
$orderbyParam = 'url';
} else if ($instance['orderby'] == 3) {
$orderbyParam = 'rating';
} else if ($instance['orderby'] == 4) {
$orderbyParam = 'rand';
}
$orderParam = 'ASC';
if ($instance['order'] == 2) {
$orderParam = 'DESC';
}
// 组合参数字符串,用于wp_multicollinks函数执行时使用。wp_multicollinks为显示友情链接的函数,原插件就有定义
$argsBinding = 'limit=' . $instance['number']
. '&columns=' . $instance['columns']
. '&category=' . $instance['category']
. '&orderby=' . $orderbyParam
. '&order=' . $orderParam
. '&navigator=' . ($instance['navigator'] ? 'true' : 'false');
extract( $args );// $args裡可以拿到所在栏位的资讯,如before_widget、after_widget..等
echo $before_widget;
echo "<h2 class=\\"widget-title\\">$this_title</h2>";
echo '<ul>';
wp_multicollinks($argsBinding);
echo '</ul>';
echo $after_widget;
}后台小工具显示及更新函数实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38// 於後台更新Widget時會做的事
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
//用填写的值给新创建的Widget实例赋值
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['number'] = strip_tags( $new_instance['number'] );
$instance['columns'] = strip_tags( $new_instance['columns'] );
$instance['category'] = strip_tags( $new_instance['category'] );
$instance['orderby'] = strip_tags( $new_instance['orderby'] );
$instance['order'] = strip_tags( $new_instance['order'] );
$instance['navigator'] = strip_tags( $new_instance['navigator'] );
return $instance;
}
// Widget在後台模組頁的外觀
function form( $instance ) {
// 可以用数组设定显示小工具表格的时的预设值
$defaults = array('title'=>'友情链接');
$instance = wp_parse_args( (array) $instance, $defaults );
// 表项的显示,显示时应该要能加载出之前已经保存的内容
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">
'Title: ', 'wp-multicollinks'); _e(
<input class="widefat" id="title" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $instance['title']; ?>" />
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'number' ); ?>">
'Number of links to show: ', 'wp-multicollinks'); _e(
</label>
<input style="width: 25px;" id="number" name="<?php echo $this->get_field_name( 'number' );?>" type="text" value="<?php echo $instance['number']; ?>" />
<br />
<small>'(0 for ∞)', 'wp-multicollinks'); </small> _e(
</p>
//以下省略剩余表项代码
}
最后,放上插件链接,点击下载 后解压到wordpress的plugin目录,启用插件即可使用 P.S. 原插件由mg12(http://www.fighton.cn/)编写