已解决
0

最近在做WordPress主题开发的时候,需要自定义一个小工具,方便用户在侧边栏的使用,在网上看到了是用register_sidebar_widget()来自定义,小工具是创建成功了,也可以正常使用,但是有一个很大的问题,就是当我使用过一次这个小工具后,在左侧可用小工具中就没有了这个小工具,也就是只能使用一次?请问这是什么问题啊,谢谢指教。

2 个回答

最佳
WordPress日记
超哥
行业大佬
行业大佬
时间: 2022年01月15日

register_sidebar_widget()创建的小工具算是临时创建了一个小工具,他的特点就是只能使用一次,正确创建可重复使用的小工具你需要使用创建小工具基础类WP_Widget创建继承类的方式来实现,比如下面是一个创建投稿链接的一个小工具。

首先,讲下面的代码放到一个你自己命名的php文件中,比如tougao.php,然后放到你的主题中(具体放的位置根据你的需要)。

<?php
class WP_Game_Tougao_Widget extends WP_Widget {
    /**
     * Constructor
     */
    function __construct() {
      $widget_ops = array('classname' => 'mx_game_tougao', 'description' => '投稿链接');
      parent::__construct('mx_game_tougao', $name='投稿链接', $widget_ops);
    }

    function widget($args, $instance) {
        extract( $args );
        $title = apply_filters('widget_title', empty($instance['title']) ? '投稿链接' : $instance['title']);
        $tougao_description = strip_tags($instance['tougao_description']);
        $tougao_pagelink = strip_tags($instance['tougao_pagelink']);
    ?>
        <?php echo $before_widget; ?>
            <div class="game-tougao-widget-box">
                <h3><?php echo $title;?></h3>
                <p><?php echo $tougao_description;?></p>
                <a href="<?php echo $tougao_pagelink;?>"><i class="iconfont icon-icon_fabu"></i><span>立即投稿</span></a>
            </div>
        <?php echo $after_widget; ?>
    <?php }
  
    function form($instance) {
      $title = strip_tags($instance['title']);
      $tougao_description = strip_tags($instance['tougao_description']);
      $tougao_pagelink = strip_tags($instance['tougao_pagelink']);
    ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>"><?php esc_attr_e('Title:'); ?></label>
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('tougao_description'); ?>">投稿描述:</label>
            <textarea class="widefat" id="<?php echo $this->get_field_id('tougao_description'); ?>" name="<?php echo $this->get_field_name('tougao_description'); ?>"><?php echo $tougao_description;?></textarea>
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('tougao_pagelink'); ?>">投稿页面链接:</label>
            <input class="widefat" id="<?php echo $this->get_field_id('tougao_pagelink'); ?>" name="<?php echo $this->get_field_name('tougao_pagelink'); ?>" type="text" value="<?php echo $tougao_pagelink; ?>" />
        </p>
    <?php }
  
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['tougao_description'] = strip_tags($new_instance['tougao_description']);
        $instance['tougao_pagelink'] = strip_tags($new_instance['tougao_pagelink']);
        return $instance;
    }
}
register_widget('WP_Game_Tougao_Widget');//把你写的小工具文件创建成小工具
?>

然后,在你的functions.php文件中引入这个文件就可以了。回头时间允许了,我们会针对创建自定义小工具录制一期视频教程。