Wordpress是款功能非常强大的CMS平台,具有极强的可扩展现性。开发者不仅可以利用其强大的API为其开发各类插件和模板,也可以自己定制它的后台。今天我们就来简单介绍一下如何对wordpress后台进行二次开发。
Wordpress的后台是由一个个Widget组成的,每个Widget完成一个特定的功能。你可以随意修改这些Widget的位置,甚至还可以创建删除Widget。下面是一个简单的例子。
添加Widget
首先我们要创建一个Widget类,继承自WP_Widget。
class Foo_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'foo_widget', // Widget的ID
'Foo_Widget', // Widget的名字
array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // 一个数组提供了Widget的一些基本信息。
);
}
/**
* 用于显示Widget界面内容的方法。
* 包含了两个数组类型的参数,$args和$instance
*
* $args中包含了4个值:before_title,after_title,before_widget,after_widget,分别是要显示在title和widget前后的html。
* $instance是当前Widget的一些属性设置
*/
public function widget( $args, $instance ) {
extract( $args );
$title = apply_filters( 'widget_title', $instance['title'] );
echo $before_widget;
if ( ! empty( $title ) )
echo $before_title . $title . $after_title;
echo __( 'Hello, World!', 'text_domain' );
echo $after_widget;
}
/**
* 当Widget的表单被提交后,这个函数分被执行到。
* 它接受两个参数,分别是提交前的表单后提交后的表单。
* 同时,这个函数也要求有一个返回值:
* - 当返回值为数组时,则是widget要保存的属性。
* - 当返回false时,不会对widget原有的属性进行更改。
*/
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = strip_tags( $new_instance['title'] );
return $instance;
}
/**
* 要提交的表单了。
*/
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'text_domain' );
}
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
</p>
<?php
}
} // class Foo_Widget
这样我们就写好了一个Widget类,为了能让这个Widget显示在后台中,我们还需要一些工作。把Widget注册到Wordpress中。
add_action( 'widgets_init', create_function( '', 'register_widget( "foo_widget" );' ) );
删除不要的Widget
Wordpress为我们提供了很多Widget,但并不一定所有的widget都是自己想要的,如果你想要你的后台更简洁一些,可以移除一些Widget。方法如下:
function unregister_default_widgets() {
unregister_widget('WP_Widget_Pages');
unregister_widget('WP_Widget_Calendar');
unregister_widget('WP_Widget_Archives');
unregister_widget('WP_Widget_Links');
unregister_widget('WP_Widget_Meta');
unregister_widget('WP_Widget_Search');
unregister_widget('WP_Widget_Text');
unregister_widget('WP_Widget_Categories');
unregister_widget('WP_Widget_Recent_Posts');
unregister_widget('WP_Widget_Recent_Comments');
unregister_widget('WP_Widget_RSS');
unregister_widget('WP_Widget_Tag_Cloud');
unregister_widget('WP_Nav_Menu_Widget');
}
add_action('widgets_init', 'unregister_default_widgets', 11);
在这个例子中,我们删掉了所有Wordpress默认的Widget。你可以根据自己的需要选择其中的一部分。