搜索热词

WordPress中文社区 > 帖子 > , > 为什么使用register_sidebar_widget()创建的自定义小工具只能使用一次?

为什么使用register_sidebar_widget()创建的自定义小工具只能使用一次?

已解决

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

发布于01月13日 被浏览 522 次
点赞 收藏 打赏 分享

    2 个回答

  1. WordPress日记

    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文件中引入这个文件就可以了。回头时间允许了,我们会针对创建自定义小工具录制一期视频教程。