2012-09-22 6 views
5

プラグイン用のカスタムウィジェットを作成しようとしていて、the codexに従っています。WordPress Widget APIでフォームにget_field_id()が必要ですか?

これはこれまで私が行ってきたことです。保存されているオプション値を保存して表示します。

  1. は何のためにあるのです。

    <?php 
    /** 
    * Plugin Name: Sample Widget 
    */ 
    
    $colors = array('red', 'blue', 'yellow'); 
    update_option('sample_widget', $colors); 
    
    add_action('widgets_init', create_function('', 'register_widget("Sample_Widget");')); 
    class Sample_Widget extends WP_Widget { 
    
        public function __construct() { 
         parent::__construct(
          'foo_widget', 
          'Sample Widget', 
          array('description' => __('This is a description of the sample widget', 'text_domain'),) // Args 
         ); 
        } 
    
        public function widget($args, $instance) { 
         extract($args); 
         $title = apply_filters('widget_title', $instance['title']); 
         $color = apply_filters('widget_title', $instance['color']); 
    
         echo $before_widget; 
         if (! empty($title)) 
          echo $before_title . $title . $after_title; 
         echo 'the selected color is ' . $color . '<br />'; 
         echo $after_widget; 
        } 
    
        public function update($new_instance, $old_instance) { 
         $instance = array(); 
         $instance['title'] = strip_tags($new_instance['title']); 
         $instance['color'] = $new_instance['color']; 
         return $instance; 
        } 
    
        public function form($instance) { 
         if (isset($instance[ 'title' ])) { 
          $title = $instance[ 'title' ]; 
         } 
         else { 
          $title = __('New title', 'text_domain'); 
         } 
         if (isset($instance[ 'color' ])) { 
          $selected_color = $instance[ 'color' ]; 
         } 
         $colors = get_option('sample_widget'); 
         ?> 
         <p> 
          <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> 
          <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /> 
         </p> 
         <p> 
          <select name="<?php echo $this->get_field_name('color'); ?>" id="<?php echo $this->get_field_id('color'); ?>"> 
           <option value="">Select...</option> 
           <?php foreach($colors as $color) echo '<option value="' . esc_attr($color) . '" ' . ($color == $selected_color ? 'selected="Selected"' : '') . '>'. $color .'</option>'; ?> 
          </select> 
         </p> 
         <?php 
        } 
    } 
    

    は、I 2つの質問がありますか?私はこの行の部分を削除し、正常に動作するようです。コーデックの作業コードをコピーするだけです。

  2. コンストラクタでは、parent::__construct()の最初のパラメータがベースIDです。これは任意の文字列値ですか?私はfoo_widgetから何かに変更して動作するようです。

ありがとうございます。

答えて

3
  1. は、このオプションに一意の「id」値を生成します。通常、これはJSを介してオブジェクトを操作できるようにするためです。

  2. id_basefoo_widgetは、このタイプのすべてのウィジェットのルートIDです。これは、ウィジェットのオプションのベースIDです(小文字)。空のままにすると、ウィジェットのクラス名の一部が使用されます。ユニークでなければなりません。これは、個々のウィジェットのID番号、すなわちfoo_widget-001

希望でに追加されます、これはあなたに役立ちます!

+0

#1に関しては、そのまま残しておくほうがいいと思います。あなたのご意見ありがとうございます。 #2については、ベースIDを 'foo_widget'から' something_else'のように変更し、 'create_function( ''、 'register_widget(" Sample_Widget ");')'に文字列値 'Sample_Widget'を使用しました。まだ動作します。だから彼らは異なった価値観があるようです。何か不足していますか? – Teno

+0

私は、件名といくつかの限られたデータベースのブラウジングを知っているに基づいて...私は、この2番目のインスタンスの 'ベースID'は、ウィジェット情報を格納するデータベーステーブルを作成するためにWordPressが使用するものですか? 'WP_Options'テーブルに行くと、 'widget_categories'や 'widget_text'のようなものが表示されます。私はアクティブなウィジェットがデータベースの 'widget_Sample_Widget'として表示されると仮定していますか?単なる考え – NerdNextDoor

+1

'register_widget()'のパラメータ値が拡張カスタムクラス名であることがわかりました。http://codex.wordpress.org/Function_Reference/register_widgetこれは基本IDとは別のものでなければなりません。 'wp_options'テーブルを閲覧したとき、実際には' widget_someting_else'という名前の要素が見つかりました; 'widget_Sample_Widget'ではありませんでした。さらに、ベースIDはオプションテーブルの文字数制限内の任意の文字列にすることができますが、最大で45文字程度であることを覚えています。 – Teno

関連する問題