widget在wordpress插件中动态创建

时间:2012-06-27 12:23:40

标签: wordpress wordpress-plugin

我正在写wordpress插件。该插件将根据API调用的响应创建小部件。我的API返回一些第三方站点链接。所以基于数组的数量,我必须创建小部件。比如说,响应有10个条目我必须根据响应创建10个小部件。目前我正在根据响应创建10个类。但我需要遍历数组并动态创建10个小部件。还有其他方法可以完成这项任务吗?请帮忙。

class widget_Mywidget extends WP_Widget {

    function widget_Mywidget() {
     $widget_ops = array( 'classname' => 'widget_Mywidget', 'description' => __( "My Widget" ) );
        $this->WP_Widget('My Widget', __('This is sample Widget'), $widget_ops);    

    }

    function widget($args, $instance) {
        extract($args);

        echo $before_widget;
        echo $before_title;

        if(!empty($instance['title'])) {
            echo $instance['title'];
        } else {
            echo "Sample";
        }

        echo $after_title;

        echo '<script src="www.google.com"></script>';
        echo $after_widget;
    }

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

    function form($instance) {
        //error_check();
        $title = (isset($instance['title'])) ? $instance['title'] : '';

        echo '<div id="myadmin-panel">';

        echo '<label for="' . $this->get_field_id("title") .'">Widget Title:</label>';
        echo '<input type="text" ';
        echo 'name="' . $this->get_field_name("title") . '" ';
        echo 'id="' . $this->get_field_id("title") . '" ';
        echo 'value="' . $title . '" /><br /><br />';
        echo '</div>';

    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用旧的小部件界面来注册您的小部件,但它自2.8以来已被弃用,因此他们可能随时将其删除(此外它还会在WP_DEBUG模式下输出警告)。

我所知道的最简单的方法是使用eval()将基类扩展为完全相同的基类(尽管不要使用私有方法):

class widget_Mywidget_base extends WP_Widget {
    //Your stuff here
}

for ($i=1;$i<=10;$i++) {
    $widget_class = 'widget_Mywidget_'.$i;
    eval("class $widget_class extends widget_Mywidget_Base { };");
    register_widget( $widget_class );
}