ウィジェットアイテムとはウィジェットにドラッグ&ドロップで加えられる定形のテンプレート。
class WP_Widget_●●● extends WP_Widget { // クラスWP_Widgetの継承クラスを定義
function WP_Widget_●●●() { } // 「利用できるウィジェット」として登録する(コンストラクタ)
function form( $instance ) { } // 管理画面のウィジェットにフォームを表示する
function update( $new_instance, $old_instance ) { } // 管理画面のウィジェットの「保存」をクリックしたときの処理
function widget( $args, $instance ) { } // ウィジェットをWeb上に表示する
}
function WP_Widget_●●●Init() { // インスタンスの生成
register_widget('WP_Widget_●●●');
}
add_action('widgets_init', 'WP_Widget_●●●Init');
クラスWP_Widget()の引数の意味は次の4つ。
WP_Widget(ウィジェットID, ウィジェット名, ウィジェットオプション, コントロールオプション);
例)
WP_Widget_●●●(
$name = 'ウィジェットアイテム名',
$widget_ops = array( 'classname' => 'Widget_●●●' , description' => 'ウィジェットアイテムの説明文');
$control_ops = array('width' => '300px' , 'height' => '300px');
parent::WP_Widget(false , $name , $widget_ops , $control_ops);
);
フォームを定義するとウィジェットアイテムの表示を変更できる
$instanceにはフォームで入力されたデータ(titleやtext)が格納されている。
ウイジェットには、識別するための一意な属性(id, name) が付けられています。その属性を get_field_id, get_field_name 関数で取得して、HTML属性の id, name で使用します
$args には、呼び出された dynamic_sidebar の情報、ウイジェットの情報、前後の付加する div情報等が設定されています。extract関数で渡された $args 連想配列を変数名と値に展開しています
$body = esc_attr($instance['body']); // body内のHTMLタグを取り除く
echo '<p><label for=" ' .$this->get_field_id('body'). ' ">' .__('テキスト:'). '</label>
<textarea rows="8" colls="20" id=" '.$this->get_field_id('body'). '" name="' .$this->get_field_name('body'). '">' .$body. '</textarea></p>';
}
記述する場所はfunctions.php
4つの関数から自作できる。
class AddWidgetItem extends WP_Widget { // クラスWP_Widgetの継承クラスを定義
function AddWidgetItem() { // 「利用できるウィジェット」に追加する
$widget_option = array( // ウィジェットアイテムの説明文
'description' => '入力したテキストを表示するだけのウィジェットです'
);
parent::WP_Widget(false, $name = 'テキスト表示ウィジェット', $widget_option); // ウィジェットアイテム名
}
function form($instance) { // 管理画面のウィジェットアイテムのフォーム表示
$body = esc_attr($instance['body']);
echo '<p><label for=" ' .$this->get_field_id('body'). ' ">' .__('テキスト:'). '</label>
<textarea rows="8" colls="20" id=" '.$this->get_field_id('body'). '" name="' .$this->get_field_name('body'). '">' .$body. '</textarea></p>';
}
function update($new_instance, $old_instance) { // 管理画面のウィジェットアイテムを保存したときの処理
$instance = $old_instance;
$instance['body'] = trim($new_instance['body']);
return $instance;
}
function widget($args, $instance) { // ウィジェットアイテムをWeb上に表示する処理
extract( $args );
$body = apply_filters( 'my_widget_body', $instance['body'] );
echo '<li class="my-text-widget"><p>'.$body.'</p></li>';
}
}
add_action('widgets_init', create_function('', 'return register_widget("AddWidgetItem");'));