为什么我的自定义小工具在重新加载后不会留在侧边栏中?

时间:2014-01-12 作者:dcp3450

将自定义小部件拖到小部件区域并重新加载页面后,它就消失了。有什么想法吗?

<?php
    add_action(\'widgets_init\',\'register_postTypeWidget\');

    function register_postTypeWidget(){
        register_widget(\'postType_widget\');
    }

    class postType_widget extends WP_Widget {
        function postType_widget() {  
            $widget_ops = array( \'classname\' => \'postType_widget\', \'description\' => __(\'Display Posts by Post Type\') );  
            $control_ops = array( \'width\' => 300, \'height\' => 350, \'id_base\' => \'postType_widget\' );  
            $this->WP_Widget( \'postType_widget\', __(\'Posts by Post Type\', \'postType_widget\'), $widget_ops, $control_ops );  
        }
         function widget($args, $instance) {
            extract($args); 
            echo "hello world";

        }
        function update( $new_instance, $old_instance ) {  

            $instance = $old_instance;

            $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );
            $instance[\'postTypeSelect\'] = strip_tags( $new_instance[\'postTypeSelect\'] );
            $instance[\'postTypeNumber\'] = strip_tags( $new_instance[\'postTypeNumber\'] );
            $instance[\'selectedPostTag\'] = strip_tags( $new_instance[\'selectedPostTag\'] );
            $instance[\'showDate\'] = strip_tags( $new_instance[\'showDate\'] );
            $instance[\'showAuthor\'] = strip_tags( $new_instance[\'showAuthor\'] );

            return $instance;

        }
        function form( $instance ) {    
        $defaults = array( \'title\' => __(\'\'), \'postTypeSelect\' => __(\'\'), \'postType_number\' =>  __(\'\'), \'selected_postTag\' =>  __(\'\'), \'show_date\' =>  __(\'\'), \'show_author\' =>  __(\'\') );
        $instance = wp_parse_args( (array) $instance, $defaults);   

        $args = \'\';
        $output = \'object\';
        $post_types = get_post_types( $args, $output );
        $posttags = get_tags();
    ?>
            <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\' ); ?>" value="<?php echo $instance[\'title\']; ?>" style="width:100%;" />
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( \'postTypeSelect\' ); ?>"><?php _e(\'Select Post Type\'); ?></label>
                <?php 
                    echo \'<select name="postTypeSelect" style="width:100%;">\';
                    echo \'<option value="">Select Post Type</option>\';
                    foreach($post_types as $post_type) {
                        if($instance[\'postTypeSelect\'] == $post_type->name)
                            echo \'<option value="\'.$post_type->name.\'" selected >\'.$post_type->label.\'</option>\';
                        else 
                            echo \'<option value="\'.$post_type->name.\'" >\'.$post_type->label.\'</option>\';
                    }
                    echo \'</select>\';
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( \'postTypeNumber\' ); ?>"><?php _e(\'Number of Posts\'); ?></label>
                <?php 
                    echo \'<select name="postTypeNumber" style="width:100%;">\';
                    echo \'<option value="">Number of Posts</option>\';
                    for($x=1; $x < 11; $x++) {
                        if($instance[\'postTypeNumber\'] == $x)
                            echo \'<option value="\'.$x.\'" selected >\'.$x.\'</option>\';
                        else
                            echo \'<option value="\'.$x.\'" >\'.$x.\'</option>\';
                    }
                    echo \'</select>\';
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( \'selectedPostTag\' ); ?>" style="display:block;width:100%;"><?php _e(\'Show Only Posts with These Tags (optional)\'); ?></label>
                <?php
                    foreach($posttags as $postTag){
                        if($instance[\'selected_postTag\'] == $postTag->term_id)
                            echo \'<input type="checkbox" name="selectedPostTag[]" value="\'.$postTag->term_id.\'" checked />\'.$postTag->name.\'</br>\';
                        else
                            echo \'<input type="checkbox" name="selectedPostTag[]" value="\'.$postTag->term_id.\'" />\'.$postTag->name.\'</br>\';
                    }
                ?>
            </p>
            <p>
                <label for="<?php echo $this->get_field_id( \'additional_options\' ); ?>" style="display:block;width:100%;"><?php _e(\'Additional Options\'); ?></label>
                <?php if($instance[\'show_date\'] == \'show_date\'): ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( \'showDate\' ); ?>" name="<?php echo $this->get_field_name( \'showDate\' ); ?>" value="showDate" checked />Show Date</br>
                <?php else: ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( \'showDate\' ); ?>" name="<?php echo $this->get_field_name( \'showDate\' ); ?>" value="showDate" />Show Date</br>
                <?php endif; ?>

                <?php if($instance[\'show_author\'] == \'show_author\'): ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( \'showAuthor\' ); ?>" name="<?php echo $this->get_field_name( \'showAuthor\' ); ?>" value="showAuthor" checked />Show Author</br>
                <?php else: ?>
                    <input type="checkbox" id="<?php echo $this->get_field_id( \'showAuthor\' ); ?>" name="<?php echo $this->get_field_name( \'showAuthor\' ); ?>" value="showAuthor" />Show Author</br>
                <?php endif; ?>
            </p>
    <?php
        }
    }
?>

1 个回复
SO网友:rockschtar

您忘记了构造函数

示例:

function __construct() {
    parent::__construct(
        \'foo_widget\', // Base ID
        __( \'Widget Title\', \'text_domain\' ), // Name
        array( \'description\' => __( \'A Foo Widget\', \'text_domain\' ), ) // Args
    );
}

http://codex.wordpress.org/Widgets_API

结束

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。