2

我正在写 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>';

    }
}
4

1 回答 1

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 );
}
于 2012-06-29T03:22:41.907 回答