説明
WP_Widget は、独自のウィジェットを作るための基底クラスです。継承して、widget()、form()、update() を実装します。
基本構文
class My_Widget extends WP_Widget
引数
widget( $args, $instance ):画面への出力form( $instance ):管理画面の設定フォームupdate( $new, $old ):保存時の処理
戻り値
register_widget() で登録して使います。
使い方(サンプル)
class My_Widget extends WP_Widget {
public function __construct() {
parent::__construct( 'my_widget', 'マイウィジェット' );
}
public function widget( $args, $instance ) {
echo $args['before_widget'] . 'Hello' . $args['after_widget'];
}
}
add_action( 'widgets_init', function() {
register_widget( 'My_Widget' );
} );
注意点
- 出力値は必ずエスケープします。
update()では、受け取った値をサニタイズして返します。- ブロックウィジェット画面では、旧ウィジェットが「レガシーウィジェット」ブロックとして扱われます。
実務での使いどころ
- 独自のウィジェットを、作るとき(
WP_Widgetを継承して、widget()・form()・update()を実装する)。
よくあるミスと対処
- クラスを作っただけで、
register_widget()で、登録していない。 widget()の中で、$args['before_widget']と$args['after_widget']を、出力していない。サイドバーの設定した、HTMLが、反映されない。update()の中で、入力値を、サニタイズしていない。widget()の中で、値を、エスケープせずに、出力している。
NG例
public function widget( $args, $instance ) {
echo $instance['title']; // エスケープがなく、前後の HTML もない
}
OK例
public function widget( $args, $instance ) {
echo $args['before_widget'];
echo esc_html( $instance['title'] );
echo $args['after_widget'];
}
public function update( $new, $old ) {
return array( 'title' => sanitize_text_field( $new['title'] ) );
}
使い分け早見表
| やりたいこと | 使うもの |
|---|---|
| ウィジェットを作る | WP_Widget を継承する |
| ウィジェットを登録する | register_widget() |
| ウィジェット領域を登録する | register_sidebar() |

コメント