おすすめコンテンツを利用すると投稿を目立たせたり、テーマごとに独自の表示をさせたりといったことができます。ブログのフロントページに配置されることを意図して作られたモジュールで、これを使うことによってテーマを切り替えた際にも問題なく同じ機能を活用できます。
開始するには以下の手順に従ってください。
- おすすめコンテンツに対応したテーマを有効化します。
- 「設定 → 表示設定」画面に移動し、おすすめコンテンツ用のタグ名を設定します。
- コンテンツをタグ付けします。
さらに詳しく知りたい方は続けて以下をお読みください。使用方法のヒント、テーマを対応させる方法、テンプレートのヒントについて説明しています。
使用方法
テーマがおすすめコンテンツ機能に対応している場合、「設定 → 表示設定」画面に移動し、「タグ名」 欄にタグの名前を入力することで有効化できます。存在しないタグ名を入力した場合は新しいタグが作成されます。設定後、このタグを付けて公開した投稿がおすすめコンテンツエリアに表示されるようになります。
おすすめ投稿の最大数を設定したい場合は「投稿数」 の値を変更してください。デフォルトではおすすめコンテンツは最大15件という値を返しますが、テーマ内でも独自の最大投稿数を定義できます。例えばテーマのおすすめコンテンツ表示で多数のアイキャッチ画像を使用する場合、この設定が必要となる可能性があります。
「投稿メタおよびタグクラウドでタグを非表示にする」を選択すると、おすすめコンテンツに選択したタグは投稿のタグ一覧やタグクラウドウィジェットに表示されなくなります。タグのアーカイブページは通常の方法で表示され続けます。
テーマへの対応追加
テーマをおすすめコンテンツ機能に対応させるためには、まず “featured-content” を1つ目のパラメータとして渡す add_theme_support()
を呼び出します。この add_theme_support()
の呼び出しは、after_setup_theme
アクションの間に実行する必要があります。
add_theme_support( 'featured-content', array( 'featured_content_filter' => 'mytheme_get_featured_posts', 'max_posts' => 20, 'additional_post_types' => 'page', ) );
2つ目のパラメーターは $args
で、配列には3つの固有値を含めることができます。最初の値は必須ですが、残りの2つは任意です。
- featured_content_filter: おすすめコンテンツを返すのに使用するカスタムフィルター名。テーマスラッグのプレフィックスを付ける必要があります。
- max_posts: エリアに含めることができる最大の投稿数。例えばエリアに6件の投稿のみを含めるようテーマを設定したい場合、
max_posts
を6に設定します。 - additional_post_types: デフォルトではおすすめコンテンツモジュールにはブログ投稿のみが表示されますが、
additional_post_types
引数を (文字列または配列の形式で) 定義することで、おすすめコンテンツを他の投稿タイプへの対応を追加できます。
Getter 機能
add_theme_support( 'featured-content' )
で定義したフィルタの値を返す関数を作成する必要があります。この機能は、おすすめ投稿をテンプレートファイルの変数に割り当てるために使用します。
function mytheme_get_featured_posts() { return apply_filters( 'mytheme_get_featured_posts', array() ); }
条件付き機能
必要のないマークアップが出力されたり、スクリプトがキューに加えられたりするのを防ぐために、こういった判断を手伝う関数を定義できます。この関数はブール値を返し、パラメーターをひとつ受け入れる必要があります。パラメーターは真 (true) の値を返すために必要なおすすめの投稿の最少数を宣言するために使われます。
function mytheme_has_featured_posts( $minimum = 1 ) { if ( is_paged() ) return false; $minimum = absint( $minimum ); $featured_posts = apply_filters( 'mytheme_get_featured_posts', array() ); if ( ! is_array( $featured_posts ) ) return false; if ( $minimum > count( $featured_posts ) ) return false; return true; }
例えばスライダーの場合、mytheme_has_featured_posts()
を様々な方法で使用してマークアップを追加したり、スクリプトをキューに加えたりできます。スライダーは一度に1件の投稿しか表示しないため、1件でも投稿があればマークアップを出力する必がはありますが、スライダーの JavaScript をキューに加える必要があるのは投稿が2件以上ある場合のみです。
// Found in our template file <?php if ( mytheme_has_featured_posts( 1 ) ) : ?> <div class="featured-content"> <?php get_template_part( 'content-featured.php' ); ?> </div> <?php endif; ?>
// In functions.php, in a function hooked to wp_enqueue_scripts if ( mytheme_has_featured_posts( 2 ) ) { wp_enqueue_script( 'mytheme-slider-script', get_template_directory_uri() . '/js/awesome-slider.js', array( 'jquery' ) ); }
テンプレート
フロントページのおすすめコンテンツエリアはテーマ全体でユーザーエクスペリエンスを標準化するために開発されました。このエリアは、WordPress サイトの「フロントページ」に常に表示されます。言い換えると、このエリアは is_front_page()
が true を返す場合に常にレンダリングされます。テーマのデザインやサイトの設定によって、is_front_page()
は複数の異なるテンプレートで true を返す可能性があります。おすすめコンテンツエリアがテーマに含まれている場合、以下のテンプレートでレンダリングされる必要があります。
front-page.php を含むテーマ
front-page.php テンプレートがテーマに存在する場合、フロントページをレンダリングするのに常に使用されます。テーマにこれが含まれている場合には、おすすめコンテンツエリアを追加する必要があるのはこのテンプレートのみです。
front-page.php のないテーマ
front-page.php がテーマに含まれない場合におすすめコンテンツを表示するには、以下のテンプレートにおすすめコンテンツエリアを追加する必要があります。
- page.php
- home.php
- index.php
- すべてのカスタムページテンプレート