特定の内容を好きなところに出力する

ワードプレス

よくわからないタイトルですが、イメージとしては、設定 > 一般 の「サイトのタイトル」「キャッチフレーズ」みたいな感じに、あるテキストを、任意のページ、任意の位置に表示させる、ということ。

内容はウィジェットやサイドバーエリアのカスタマイズです。

  • テンプレートファイルに直書き、はメンテナンス性が悪い。
  • 投稿の内容を出力させる、というのであれば、<?php echo get_the_excerpt(); ?>(要約、pなし)で出せますが、投稿一覧がごちゃごちゃするし、うっかり消しちゃうかもしれない。
  • カスタムフィールドの内容を他のページに出力させる、という記事を見つけて試してみましたが、うまくいかず。

 

何か簡単で、メンテナンスしやすい方法はないかと思案して、ウィジェットを使うやり方で妥協。

ウィジェットの設定画面は、たいてい「サイドバー」となっているので、なんとなくサイドバー以外への利用を思いつかなかった。

 

ここで問題。ウィジェットを表示させると、いろいろなタグがもれなく付いてくる。

aside、class=”widget”、ul、li、pなどなど。

調べてみると、ウィジェットというのは自分で作れる(設定できる)らしい。

また、サイドバーも好きなように設定できるらしい。

 

1 : サイドバーの改変

functions.phpの中に、こんな感じの記述がありますが、

	register_sidebar( array(
		'name'          => __( '標準サイドバー', 'P2' ),
		'description'   => __( 'タグが付きます', 'P2' ),
		'id'            => 'sidebar1',
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<h4 class="widget-title">',
		'after_title'   => '</h4>',
	) );

 

こんな風に変えると、タグが一切出てこない。

	register_sidebar( array(
		'name'          => __( 'シンプルサイドバー', 'P2' ),
		'description'   => __( '余分なタグなし', 'P2' ),
		'id'            => 'plainSidebar',
		'before_widget' => '',
		'after_widget'  => '',
		'before_title'  => '',
		'after_title'   => '',
	) );

 

2 : ウィジェットの追加

テキストだけ出力するウィジェットは、functions.phpに以下を書き加える。

class MyWidgetItem extends WP_Widget {
	function MyWidgetItem() {
		parent::WP_Widget(false, $name = 'プレーンテキスト');
	}
	function widget($args, $instance) {
		extract( $args );
		$title = apply_filters( 'widget_title', $instance['title'] );
		$body = apply_filters( 'widget_body', $instance['body'] );
	?><?php if ( $title ) ?><?php echo $before_title . $title . $after_title; ?><?php echo $body; ?><?php
	}
	function update($new_instance, $old_instance) {
	$instance = $old_instance;
	$instance['title'] = strip_tags($new_instance['title']);
	$instance['body'] = trim($new_instance['body']);
	return $instance;
	}
	function form($instance) {
	$title = esc_attr($instance['title']);
	$body = esc_attr($instance['body']);
	?>
	<p>
	<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('タイトル:'); ?>
	</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 $title; ?>" /></p>
	<p>
	<label for="<?php echo $this->get_field_id('body'); ?>">
	<?php _e('本文:'); ?>
	</label>
	<textarea class="widefat" rows="16" colls="20" id="<?php echo $this->get_field_id('body'); ?>" name="<?php echo $this->get_field_name('body'); ?>">
<?php echo $body; ?></textarea>
	</p>
	<?php
	}
}
add_action('widgets_init', create_function('', 'return register_widget("MyWidgetItem");'));

 

3 : 出力

「シンプルサイドバー」エリアに、「プレーンテキスト」をドラッグ&ドロップ。

あとは、表示させたい場所にタグを書く。

例:ヘッダー > サイトの詳細に挿入。

<meta name="description" content="<?php dynamic_sidebar('plainSidebar'); ?>" />

※このケースだけなら、SEO系のプラグインを入れた方がいいですが、とりあえず例として。