【WordPress】任意の記事にのみ共通パーツを表示する方法|条件分岐で柔軟にカスタマイズ

【WordPress】任意の記事にのみ共通パーツを表示する方法|条件分岐で柔軟にカスタマイズ WordPress

WordPressで「特定の記事にだけバナーや共通コンテンツを表示したい」という場面はよくあります。この記事では、投稿IDやスラッグ、カスタムフィールド、カテゴリーなどの条件に応じて、共通パーツを柔軟に表示する方法を紹介します。

以下はそれぞれ独立した実装方法です
これから紹介する4つの方法(投稿ID・スラッグ・カスタムフィールド・カテゴリー)は、同じ目的を達成するための別々の選択肢です。サイトの運用スタイルに合わせていずれか1つを選んで使ってください。複数の方法を同じテンプレートに重ねて実装すると、両方の条件に一致する記事(該当IDかつcampaignカテゴリーなど)で共通パーツが二重に表示されてしまいます。
スポンサーリンク

投稿IDで共通パーツを表示する

もっともシンプルなのが投稿IDを使った方法です。特定のIDを持つ記事だけに共通パーツを表示できます。

投稿IDによる条件分岐
<?php
if ( is_single(123) || is_single(456) ) {
  get_template_part('template-parts/special-content');
}
?>

上記の例では、IDが123または456の記事でのみtemplate-parts/special-content.phpを読み込みます。

投稿スラッグで判定する方法

スラッグはURLにも使用される文字列なので、IDよりも可読性が高い場合があります。

投稿スラッグによる条件分岐
<?php
if ( is_single('sample-post') || is_single('news-release') ) {
  get_template_part('template-parts/special-content');
}
?>

投稿スラッグがsample-postやnews-releaseの場合に限定して表示されます。

is_single()の文字列引数はタイトルとも一致する
is_single()に文字列を渡した場合、スラッグ(post_name)だけでなく投稿タイトルの完全一致でもtrueになります。別の記事のタイトルが偶然同じ文字列と一致すると、意図しない記事でも共通パーツが表示されてしまう可能性があるため、タイトルと重複しにくい値を使うか、確実性を重視する場合は投稿IDでの判定を選びましょう。

カスタムフィールドで制御する方法

記事ごとに表示・非表示を柔軟に切り替えたい場合は、カスタムフィールドが便利です。

カスタムフィールドによる条件分岐
<?php
$show_part = get_post_meta(get_the_ID(), 'show_special_part', true);
if ( $show_part === '1' ) {
  get_template_part('template-parts/special-content');
}
?>

記事編集画面でshow_special_partというカスタムフィールドに1を指定するだけで、共通パーツが表示されます。

特定のカテゴリーで表示する方法

記事のカテゴリーに応じて共通パーツを表示したい場合は、has_category()関数を使います。

カテゴリーによる条件分岐
<?php
if ( has_category('campaign') ) {
  get_template_part('template-parts/special-content');
}
?>

この例では「campaign」というスラッグのカテゴリーに属する記事にだけ表示されます。

よくある質問(FAQ)

Q特定の記事IDのときのみ共通パーツを表示するには?
Ais_single()にIDの配列を渡してis_single(array(1,2,3))で複数ID指定ができます。またはカスタムフィールドにフラグを立てて条件分岐する方法も柔軟に対応できます。
QカテゴリーとIDの組み合わせで表示するパーツを切り替えるには?
Ais_single()・in_category()・get_the_terms()などの条件タグを組み合わせて、テンプレート内で分岐します。get_template_part()を条件ごとに呼び分けると保守性が高まります。
Q条件に応じたパーツをショートコードで呼び出せるようにするには?
Aadd_shortcode()で条件付き表示ロジックをラップしたショートコードを作成します。エディター上で[show_if_cat cat=”news”]コンテンツ[/show_if_cat]のように使えます。

まとめ

任意の記事にだけ共通パーツを表示する方法は、さまざまな条件で制御できます。以下に主な条件と使用する関数をまとめました。

条件 使用する関数
投稿ID is_single(123)
スラッグ is_single('post-slug')
カスタムフィールド get_post_meta()
カテゴリー has_category()

条件分岐とget_template_part()を組み合わせることで、メンテナンス性と再利用性の高いテンプレートが構築できます。特定のキャンペーン記事にだけバナーを表示したいなど、用途に応じて活用してみてください。