タイトルなしのテキストウィジェットの表示方法を変更

タイトルが空文字の場合はタイトルを含む要素を出力しないように修正しました。バナー貼ったりするとき用。修正箇所は、default-widget.php 内の WP_Widget_Text クラス。

if ( !empty( $title ) ) {
    echo $before_widget;
    echo $before_title . $title . $after_title; ?>
        <div class="textwidget"><?php echo $instance['filter'] ? wpautop($text) : $text; ?></div>
    <?php
    echo $after_widget;
} else {
    echo "<dd>"; ?>
    <div class="textwidget"><?php echo $instance['filter'] ? wpautop($text) : $text; ?></div>
    <?php
    echo "</dd>";
}

とりあえず動いている様子。

(追記)

default-widget.php を直接変更してしまうとバージョンアップの際に面倒です。テーマの中にウィジェットを定義するファイルがあれば、そちらに記述するほうが良いと思います。僕が使っている wp.Vicuna Ext. Custom の場合は script/widget.php というファイルがありますので、その中に以下の記述を追加します。

class My_WP_Widget_Text extends WP_Widget_Text {
	function My_WP_Widget_Text() {
		// ウィジェットの初期設定
		$widget_opts = array('classname' => 'my_widget_text', 'description' => 'タイトル無しのテキストウィジェット' );
		$control_opts = array('width' => 400, 'height' => 350);
		$this->WP_Widget('MyTextWidget', 'My Text', $widget_opts, $control_opts);
	}
	// widget() メソッドのみ変更。
	function widget( $args, $instance ) {
		extract($args);
		$title = apply_filters( 'widget_title', empty($instance['title']) ? '' : $instance['title'], $instance );
		$text = apply_filters( 'widget_text', $instance['text'], $instance );
		if ( !empty( $title ) ) {
			echo $before_widget;
			echo $before_title . $title . $after_title; ?>
				<div class="textwidget"><?php echo $instance['filter'] ? wpautop($text) : $text; ?></div>
			<?php
			echo $after_widget;
		} else {
			echo "<dd>"; ?>
			<div class="textwidget"><?php echo $instance['filter'] ? wpautop($text) : $text; ?></div>
			<?php
			echo "</dd>";
		}
	}
	// update() および form() メソッドはスーパークラスのものを継承
	function update( $new_instance, $old_instance ) {
		return parent::update( $new_instance, $old_instance );
	}
	function form( $instance ) {
		parent::form( $instance );
	}
}
add_action('widgets_init', create_function('', 'return register_widget("My_WP_Widget_Text");'));
スポンサーリンク
レクタングル(大)
レクタングル(大)

コメント

  1. TYME より:

    wp widget に関する日本語の情報が少ない中、大変参考になりました。

    また私の場合 vicuna を使用していないので script/widget.php ではなく function.php に直接記述しました。
    (requireされていただけなので当たり前かも知れませんが、)問題なく動作しました。

  2. digitalbox より:

    TYME さん、こんにちは。参考になったと言っていただけるととても嬉しく思います。ありがとうございます。最近は WordPress での業務が増えたので Widget 関連の開発もやってるんですが、おっしゃるとおり日本語の情報がまだまだ少ないように感じます。今後も自分のメモ的なものですが Widget の改造についてぼちぼち書いていきたいと思います。