2

我在我的主题插件目录中创建了一个自定义小部件,它似乎按预期工作,但是当我注册第二个自定义小部件时,第一个自定义小部件似乎被覆盖,我不再可以访问它。以下是我的小部件代码:

add_action( 'widgets_init', create_function( '', 'register_widget( "staffWidget" );' )     );


class staffWidget extends WP_Widget{
    function staffWidget() {  
            parent::WP_Widget(true, 'Staff');  
    } 

    function widget($args, $instance){
        echo "test widget";
    }

    function update($new_instance, $old_instance){
        return $new_instance;
    }

    function form($instance){
        $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
        if($instance['title']){
            $title = $instance['title'];
        }
        else{
            $title = "Add title here";
    }
    ?>
    <p><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input     class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
    <?php
    }
}

两个小部件都具有这种代码结构,但具有不同的类名,并且两个小部件都已在 WP 仪表板的插件部分中激活。任何帮助或建议将不胜感激。提前致谢 :)

4

1 回答 1

1

WP_Widget您正在使用错误的参数调用该类。

/**
 * PHP5 constructor
 *
 * @param string $id_base Optional Base ID for the widget, lower case,
 * if left empty a portion of the widget's class name will be used. Has to be unique.
 * @param string $name Name for the widget displayed on the configuration page.
 * @param array $widget_options Optional Passed to wp_register_sidebar_widget()
 *   - description: shown on the configuration page
 *   - classname
 * @param array $control_options Optional Passed to wp_register_widget_control()
 *   - width: required if more than 250px
 *   - height: currently not used but may be needed in the future
 */
function __construct( $id_base = false, $name, $widget_options = array(), $control_options = array() ) {

如果您false输入 (默认值) 或 a string,它将起作用。所以,假设我们有一个小部件 Staff 和另一个 Stuff,这样可以:

parent::WP_Widget('staff', 'Staff', array(), array() ); 

parent::WP_Widget('stuff', 'Stuff', array(), array() ); 

您的代码正在使用attribute_escape,已弃用。如果启用WP_DEBUG,您将看到警告。无论如何,始终打开它进行开发是一个很好的做法。
所有这些都表明您正在使用错误的来源作为示例。这是一篇关于自定义小部件的文章。

于 2013-02-15T19:56:34.293 回答