Wordpress 中的小工具(Widget)是一个很好用的工具,一般可以显示在侧边栏、顶栏、底栏等区域。虽然官方的小工具已经很丰富了,但是有时我们还是希望能够实现一个更符合自己需求的小工具。
笔记就以最简单的功能——把设置的文本显示在页面上,为例,介绍一个简单但完整的编写 wordpress 小工具的过程。
首先我们需要决定我们希望以何种形式引入我们的小工具。这里记录三种:
wordpress/wp-includes/widgets/
。可以把代码文件也放在此处。wordpress/wp-content/plugins/
。在此路径下新建一个文件夹,并把代码放在此文件夹下,就可以在插件页面发现新插件。注意只有激活此插件后才会使得代码有效。笔记采用的是第三种,以插件形式引入小工具。创建文件夹 wordpress/wp-content/plugins/Quote
并在路径下新建文件 wordpress/wp-content/plugins/Quote/Quote.php
。
在文件中加入如下代码,这样小工具的代码框架就搭好了。
class YourWidget extends WP_Widget { // YourWidget 是小工具的类名,编写时依照功能自己决定。
function __construct() { // 构造函数。在这个函数里可以做出一些定义,比如WordPress小工具的ID、标题和说明。
}
function form($instance) { // 创建小工具表单
}
function update( $new_instance, $old_instance ) { // 允许表单更新
}
function widget( $args, $instance ) { // 核心功能函数
}
}
?>
<?php
function register_yourwidget() { // 注册小工具,使得可以在小工具面板看见
register_widget( '' ); // // register_widget()函数是一个WordPress函数,它唯一的参数就是你刚刚创建的类的命名。
}
add_action( 'widgets_init', 'register_yourwidget' ); // 将你创建的函数挂入 widgets_init 钩子,确保它可以被WordPress拾起。
?>
可见整个代码分为5个大模块,前4个属于一个新类,第5部分是注册部分:
上面已经把注册的框架搭好了,此处展示具体例子:
function register_Quote() { // 注册小工具,使得可以在小工具面板看见
register_widget( 'Quote' ); // // register_widget()函数是一个WordPress函数,它唯一的参数就是你刚刚创建的类的命名。
}
add_action( 'widgets_init', 'register_Quote' ); // 将你创建的函数挂入 widgets_init 钩子,确保它可以被WordPress拾起。
?>
在构造函数区,我们需要定义
具体的代码可以是这样
function __construct() { // 构造函数。在这个函数里可以做出一些定义,比如WordPress小工具的ID、标题和说明。
parent::__construct(
// 小工具ID WordPress小工具的唯一ID
'Quote',
// 小工具名称 WordPress小工具在其界面上的名称
__('UQuote', 'UQuote' ),
// 小工具选项 一系列在WordPress小工具界面显示的选项,包括选项说明。
array (
'description' => __( 'Say somting about this Widget', 'UQuote' )
)
);
}
保存文件并且去 wordpress 插件区激活这一插件,你就能在小工具区里找到自己的小工具了,只是现阶段只有一个图标,并不能实现任何功能,后面我们继续完善代码便可一步步实现功能。
表单就是我们在小工具区,对小工具进行设置的功能。以笔记为例,我们希望能够输入一个语句,让小工具展示在页面上,那么我们就需要在表单函数里面,定义输入语句的方式,和输入内容的存储。
代码如下:
function form($instance) { // 创建小工具表单
$quotetext = $instance[ 'quotetext' ]; // 要填写并传递的参数,此例为要展示的语句。
//定义表单的样式,并且存储用户设置/输入内容
?>
<p>
<label for="$this->get_field_id('quotetext'); ?>">填写文本</label>
<input id="$this->get_field_id('quotetext'); ?>" name="$this->get_field_name('quotetext'); ?>" type="text" value="$quotetext); ?>" />
</p>
<?php
}
显然代码以文本框输入的形式实现用户输入,并把输入内容存储在参数 $instance[ 'quotetext' ]
中。
允许用户在表单设置小程序后,还需要时刻把用户的表单内容更新到小工具中去,更新代码如下:
function update( $new_instance, $old_instance ) { // 允许表单更新
// 保存小工具选项
$instance = $old_instance;
$instance[ 'quotetext' ] = strip_tags( $new_instance[ 'quotetext' ] ); // 上述代码用新值($new_instance)代替了depth字段的旧值($old_instance),并采用strip_tags进行消毒。
return $instance;
}
现在再去 wordpress 小工具区,就可以发现我们的小工具已经可以进行设置了(可以输入自定义文本了)。
此处是小工具的关键,即核心功能代码区。在这里我们主要实现表单设置内容的传入与获取、以及功能代码编写。
以 Quote 为例,我们需要实现自定义文本的传入,以及在页面上的显示,这两部分。
代码如下:
function widget( $args, $instance ) { // 核心功能函数
// 小工具输出
// kick things off
extract( $args );
//echo $before_widget;
//echo $before_title . 'Set title here:' . $after_title;
$textdispaly = $instance[ 'quotetext' ]; // 获取输入的参数
// 在侧边栏显示获得的参数,此例为语句。
?>
<pre class="wp-block-verse has-medium-font-size"><font size="3"><?php echo $textdispaly; ?></font></pre>
<?php
}
我们去小工具区,输入文本,保存小工具更改,最后回到主页面。终于我们的文本以小工具的形式成功显示在主页上啦!
/*Plugin Name: Quote
Description: This function works as wordpress widget. It shows a quote set by the user.
Version: 1.0
Author: XXXXXXXXXXX
Author URI: XXXXXXXXXXXXX
License: GPLv2
*/
?>
<?php
class Quote extends WP_Widget { // Quote 是小工具的类名
function __construct() { // 构造函数。在这个函数里可以做出一些定义,比如WordPress小工具的ID、标题和说明。
parent::__construct(
// 小工具ID WordPress小工具的唯一ID
'Quote',
// 小工具名称 WordPress小工具在其界面上的名称
__('UQuote', 'UQuote' ),
// 小工具选项 一系列在WordPress小工具界面显示的选项,包括选项说明。
array (
'description' => __( 'Say somting about this Widget', 'UQuote' )
)
);
}
function form($instance) { // 创建小工具表单
$quotetext = $instance[ 'quotetext' ]; // 要填写并传递的参数,此例为要展示的语句。
//后台选项
?>
<p>
<label for="$this->get_field_id('quotetext'); ?>">填写文本</label>
<input id="$this->get_field_id('quotetext'); ?>" name="$this->get_field_name('quotetext'); ?>" type="text" value="$quotetext); ?>" />
</p>
<?php
}
function update( $new_instance, $old_instance ) { // 允许表单更新
// 保存小工具选项
$instance = $old_instance;
$instance[ 'quotetext' ] = strip_tags( $new_instance[ 'quotetext' ] ); // 上述代码用新值($new_instance)代替了depth字段的旧值($old_instance),并采用strip_tags进行消毒。
return $instance;
}
function widget( $args, $instance ) { // 核心功能函数
// 小工具输出
// kick things off
extract( $args );
//echo $before_widget;
//echo $before_title . 'Set title here:' . $after_title;
$textdispaly = $instance[ 'quotetext' ]; // 获取输入的参数
// 在侧边栏显示获得的参数,此例为语句。
?>
<pre class="wp-block-verse has-medium-font-size"><font size="3"><?php echo $textdispaly; ?></font></pre>
<?php
}
}
?>
<?php
function register_Quote() { // 注册小工具,使得可以在小工具面板看见
register_widget( 'Quote' ); // // register_widget()函数是一个WordPress函数,它唯一的参数就是你刚刚创建的类的命名。
}
add_action( 'widgets_init', 'register_Quote' ); // 将你创建的函数挂入 widgets_init 钩子,确保它可以被WordPress拾起。
?>
首先,四个常用小工具函数:
还有五个内部函数:
要访问这些内部函数,你将使用WP_Widget这类。这是一个构造函数类,它可以扩展来创建额外的小工具。
链接:https://www.wpdaxue.com/creat-your-first-wordpress-widget.html.