📅  最后修改于: 2023-12-03 15:21:13.611000             🧑  作者: Mango
当你在 WordPress 站点上添加小部件时,有时您需要为小部件类别创建自定义编辑器。使用 WordPress 提供的默认编辑器可能不足以满足您的需求,因此您可以使用 PHP 来创建一个更高级的小部件编辑器。
首先,你需要在 functions.php
文件中使用 register_widget()
函数为你的小部件创建一个类别。在这个类别中,你可以添加你需要编辑的字段和其他相关内容。
class My_Custom_Widget extends WP_Widget {
public function __construct() {
// 小部件的基本信息
parent::__construct(
'my_custom_widget', // 小部件 ID
'自定义小部件', // 小部件名称
array( 'description' => '一个自定义小部件' ) // 小部件描述
);
}
public function widget( $args, $instance ) {
// 小部件的内容
}
public function form( $instance ) {
// 小部件类别的编辑器
}
public function update( $new_instance, $old_instance ) {
// 更新小部件内容
}
}
function register_my_custom_widget() {
register_widget( 'My_Custom_Widget' );
}
add_action( 'widgets_init', 'register_my_custom_widget' );
这里,我们使用了 WP_Widget
类来创建一个继承自 WordPress 的小部件。小部件的类别名称为 My_Custom_Widget
,它包括了 widget()
、form()
和 update()
方法,以及一个 register_my_custom_widget()
函数,该函数使用 register_widget()
函数在 WordPress 中注册了这个小部件。
在 My_Custom_Widget
类别中,我们可以使用 form()
方法来创建一个小部件类别编辑器。这个编辑器可以包括多个输入字段,以便编辑并更新小部件内容。
public function form( $instance ) {
// 首先检查小部件的实例是否存在,如果不存在,则默认为一个空数组
$instance = wp_parse_args( (array) $instance, array(
'title' => '',
'text' => '',
) );
// 根据需要包含不同的表单字段
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">标题:</label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'text' ); ?>">内容:</label>
<textarea class="widefat" rows="10" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo esc_textarea( $instance['text'] ); ?></textarea>
</p>
<?php
}
在上述代码中,我们首先从小部件的实例中获取 title
和 text
字段的值。然后,我们使用 wp_parse_args()
函数来确保这些字段的默认值被正确初始化。
接着,我们使用 <label>
和 <input>
标签来创建 title
字段的输入框,并使用 <textarea>
标签来创建 text
字段的输入框。
最后,我们使用 esc_attr()
和 esc_textarea()
函数分别过滤输入的标题和内容,以避免 XSS 攻击和其他安全问题。
当用户提交小部件类别编辑器中所做的更改时,我们需要使用 update()
方法来更新小部件内容。
public function update( $new_instance, $old_instance ) {
// 过滤输入的标题和内容
$instance = array(
'title' => sanitize_text_field( $new_instance['title'] ),
'text' => sanitize_text_field( $new_instance['text'] ),
);
return $instance;
}
在上述代码中,我们使用 sanitize_text_field()
函数过滤输入的标题和内容,以避免任何潜在的安全问题。
最后,我们以新实例的形式返回更新的小部件内容。此时,WordPress 会将更新后的小部件内容保存在数据库中,并在页面上显示新的小部件。