5
プラグイン用のカスタムウィジェットを作成しようとしていて、the codexに従っています。WordPress Widget APIでフォームにget_field_id()が必要ですか?
これはこれまで私が行ってきたことです。保存されているオプション値を保存して表示します。
- は何のためにあるのです。
<?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つの質問がありますか?私はこの行の部分を削除し、正常に動作するようです。コーデックの作業コードをコピーするだけです。
- コンストラクタでは、
parent::__construct()
の最初のパラメータがベースIDです。これは任意の文字列値ですか?私はfoo_widget
から何かに変更して動作するようです。
ありがとうございます。
#1に関しては、そのまま残しておくほうがいいと思います。あなたのご意見ありがとうございます。 #2については、ベースIDを 'foo_widget'から' something_else'のように変更し、 'create_function( ''、 'register_widget(" Sample_Widget ");')'に文字列値 'Sample_Widget'を使用しました。まだ動作します。だから彼らは異なった価値観があるようです。何か不足していますか? – Teno
私は、件名といくつかの限られたデータベースのブラウジングを知っているに基づいて...私は、この2番目のインスタンスの 'ベースID'は、ウィジェット情報を格納するデータベーステーブルを作成するためにWordPressが使用するものですか? 'WP_Options'テーブルに行くと、 'widget_categories'や 'widget_text'のようなものが表示されます。私はアクティブなウィジェットがデータベースの 'widget_Sample_Widget'として表示されると仮定していますか?単なる考え – NerdNextDoor
'register_widget()'のパラメータ値が拡張カスタムクラス名であることがわかりました。http://codex.wordpress.org/Function_Reference/register_widgetこれは基本IDとは別のものでなければなりません。 'wp_options'テーブルを閲覧したとき、実際には' widget_someting_else'という名前の要素が見つかりました; 'widget_Sample_Widget'ではありませんでした。さらに、ベースIDはオプションテーブルの文字数制限内の任意の文字列にすることができますが、最大で45文字程度であることを覚えています。 – Teno