2

私はワードプレスプラグインを書いています。このプラグインは、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 に答える