ようこそのお運びで、厚く御礼申し上げます。
37日目です。今回はウィジェットを作成してみたいと思います
サイドバーに、特定の文字列の入ったウィジェットを追加してみる。
今回は初めてですので、ポイントを2個にしぼります。

こちらの画像から、
- 画面右:サイドバー(ウィジェットを配置する枠)
- 画面左:ウィジェット
となっており、今回は1を準備ポイントとし、2の「ウィジェット」を新規に作成できるところまで頑張ってみます。
【準備その1】:もしウィジェットが使えなければ…ウィジェットを有効化しよう。
説明は色々なところで紹介されているので説明は省略しますが、以下のコードをfunction.phpに記入すると、有効化されます。
//function.php
if ( function_exists('register_sidebar') )
register_sidebar();
出力するテーマファイル(sidebar.php等)には、以下のように記載すると出力されます。
<!--出力するテーマファイル--> <?php dynamic_sidebar(); ?>
【準備その2】:ウィジェットの枠は、たくさん作れます。
もちろん、このサイドバー(枠)を複数作ることもできます。
(WordPress Codex 日本語版:register sidebarを参照)
【準備その1】はデフォルト値ですが、もし自分でこの枠を追加する場合は、function.phpに以下の例のように記載します。
if ( function_exists('register_sidebar') ){
register_sidebar(array(
'name' => 'サイドバー1',
'id' => 'sidebar1',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h4>',
'after_title' => '</h4>'));
/*2つ目の枠*/
register_sidebar(array(
'name' => 'バナー・ピックアップ枠',
'id' => 'ban1',
'before_widget' => '<div class="ban" id="ban1">',
'after_widget' => '</div>',
'before_title' => '<span>',
'after_title' => '</span>'));
}
出力するテーマファイルのdynamic_sidebarの引数には、設定したidを指定します(WordPress Codex:dynamic_sidebarを参照)。
<!--出力するテーマファイル-->
<?php dynamic_sidebar('sidebar1'); ?>
<?php dynamic_sidebar('ban1'); ?>
※あとは、ウィジェットを実際に使ってみましょう。デフォルトでも十分使える便利機能です。
本題「ウィジェットを追加」します。
今回は文字列の表示のみです。まず、ウィジェットを追加します。

次に、実際にどこに表示するかを決めて保存します。画面ではサイドバー1という枠です。

サイドバーに文字列が表示されました。

まずはfunctions.phpに書いてみます。
では、ウィジェットと追加のために、functions.phpに以下のコードを書きました。
//ウィジェット生成用アクションフィルタ
add_action('widgets_init', create_function('', 'return register_widget("Paka3FirstWidget");'));
class Paka3FirstWidget extends WP_Widget {
//コンストラクタ:オブジェクト生成時呼び出し
public function __construct(){
//*名前
$name = "文字列自作ウィジェット";
//*説明文
$widget_ops = array( 'description' => '自作ウィジットをはじめました' );
//*管理画面での表示サイズ(今回はなし)
//*array( 'width' => *, 'height' => * );
$control_ops = "";
parent::WP_Widget(false, $name,$widget_ops,$control_ops);
//今回表示する文字列
$this->str ="WordPress1日1プラグインやってます!";
}
//ウィジェット:画面表示
public function widget($args, $instance) {
extract( $args );
$title = apply_filters('widget_title', $instance['title']);
$title = $title ? $before_title.$title.$after_title: "";
echo <<<EOS
{$before_widget}
{$this->str}
{$after_widget}
EOS;
}
//管理画面:ウィジェット画面
function form($instance) {
echo <<<EOS
<p>
{$this->str}
</p>
EOS;
}
}
ポイントはどこ?
今回は「WordPress ウィジェット API(WordPress Codex 日本語版)」と「Widgets API < WordPress Codex」を参考にして作っていきます。
また、WP_Widgetクラスを継承しているみたいなので、そちらのクラスも確認するとわかりやすいかもしれません。
- アクションフィルタとクラス構造
ほぼ、定型なので最初は型通りにしていきます(今回はまだ更新処理はしていません。)//ウィジェット生成用アクションフィルタ add_action('widgets_init', create_function('', 'return register_widget("Paka3FirstWidget");')); class Paka3FirstWidget extends WP_Widget { public function __construct(){ //コンストラクタ:オブジェクト生成時呼び出し //初期設定 } public function widget($args, $instance) { //画面表示 } function form($instance) { //管理画面:ウィジェット画面 } } - コンストラクタで初期設定行う際、名前、説明文、画面のサイズなどを設定することがか可能です。
class Paka3FirstWidget extends WP_Widget { //コンストラクタ:オブジェクト生成時呼び出し public function __construct(){ //*名前 $name = "文字列自作ウィジェット"; //*説明文 $widget_ops = array( 'description' => '自作ウィジットをはじめました' ); //*管理画面での表示サイズ(今回はなし) //*array( 'width' => *, 'height' => * ); $control_ops = ""; parent::WP_Widget(false, $name,$widget_ops,$control_ops);c //今回表示する文字列 $this->str ="WordPress1日1プラグインやってます!"; } - 画面表示のwidgetでは、extractで、サイドバー(枠)を作成時に定義した値を、変数に設定します($before_widget,$after_widget,$before_title,$after_title...等々)。
//ウィジェット:画面表示 public function widget($args, $instance) { extract( $args ); //...... }
コードをプラグイン用のファイルにします
それではfunctions.phpに書いたコードを消して、
「paka3_firstWedget.php」というファイルを作成し、以下のコードを記入します。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
今回のまとめ
ウィジェットを初めて作成してみました。疑問はあるのですが、まずは使い方に慣れてみましょう。今回は表示のみだったので、テキストを入力して、そのテキストを表示してみたいと思います。