よくわからないタイトルですが、イメージとしては、設定 > 一般 の「サイトのタイトル」「キャッチフレーズ」みたいな感じに、あるテキストを、任意のページ、任意の位置に表示させる、ということ。
内容はウィジェットやサイドバーエリアのカスタマイズです。
- テンプレートファイルに直書き、はメンテナンス性が悪い。
- 投稿の内容を出力させる、というのであれば、<?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系のプラグインを入れた方がいいですが、とりあえず例として。