WordPressには、投稿に任意の情報(メタデータ)を追加することができる「カスタムフィールド」という機能があります。
この機能を使用し、カスタムフィールドに値を設定することで、例えば「記事を任意の順序で並べ替える」、「記事ごとにとある場所の表示内容を切り替える」など、Webサイトの機能拡張をある程度容易にすることができます。
今回は、投稿ページにカスタムフィールドを設定し、その設定した値でサイドバーの広告表示内容を切り替えたいと思います。
全てのページにおいて、サイドバーに固定の広告を表示させていると、広告と関連のないページの場合は少しもったいないですからね。
ちなみに、使用しているWordPressテーマは「STINGER3」ですので、切り替える広告はスクロール広告に設定しているAmazon商品リンクです。
なお、今回のバージョンは以下です。
- WordPress 3.9.1
- STINGER3_ver20140327
カスタムフィールドの設定
まずは、投稿ページにカスタムフィールドを設定する。
投稿ページの右上「表示オプション」⇒「カスタムフィールド」にチェックする。
そうすると、投稿ページ下部に「カスタムフィールド」が表示される。
ここで、カスタムフィールドを設定することができる。
今回は、サイドバーのスクロール広告に表示されるAmazonの商品リンクの内容を、カスタムフィールドに設定した値によって変更させたいので、以下のようにした。
- カスタムフィールド名前…「amazon_link」
- カスタムフィールド値…「SEO」、「WP」など
サイドバーの変更
サイドバーと呼び出すテンプレートファイルを、以下のように修正した。
「sidebar.php」ファイルはこちら。
「get_template_part」関数は、テンプレートファイルを読み込む関数である。
<!--アドセンス--> <div id="ad1"> <div style="text-align:center;"> <?php get_template_part('ad/sidebar-scroll');?> </div> </div>
「sidebar-scroll.php」ファイルはこちら。
カスタムフィールドを取得するためには、「get_post_meta」関数を使用する。
「get_post_meta」関数のパラメータは、以下の通り。
- 「$post_id」…データを取得したい投稿のID
- 「$key」…取得したい値のキー名の文字列
- 「$single」…trueにセットした場合、文字列として単一の結果を返す。falseまたは値をセットしなかった場合、カスタムフィールドの配列を返す。
<ul><li> <h4 class="menu_underh2" style="text-align:left;">おすすめ書籍</h4> <div> <?php if(is_single()){ $meta = get_post_meta(get_the_ID(), 'amazon_link', true); } elseif (is_category()) { $categories = get_the_category(); if($categories){ foreach($categories as $category) { $meta = $category->description; } } } else { $meta = 'SEO'; } if($meta){ get_template_part('amazon/link', strtolower($meta)); } else { get_template_part('amazon/link', 'seo'); } ?> </div> </li></ul>
「is_single()」関数で、投稿ページの場合にカスタムフィールドの値を取得し、読み込む広告用テンプレートファイルを切り替えてみました。
カスタムフィールドは、とても便利で役に立ちますね。
以上です。
コメント