WordPressテーマ変更!SimplicityからCocoonへ

複数カテゴリ・記事のPHP条件分岐!WordPress分岐タグif文・条件式の書きかた

スポンサーリンク

WordPressPHP初心者向けにif文『もし○○のとき××』の書きかたを紹介します。使う分岐タグはギュッとしぼってin_category()is_category()is_single()。HTMLタグを入れ込みたいとき、シンプルphpの書きかたです。

ついでに&&||!3つの条件式を使うと詳細な条件を分岐できて便利なので、その指定方法は必要に応じてチェックしてください。

記事でわかる・できること
  1. ページ毎』の分岐タグ、または『カテゴリ分けした記事』毎に表示を変えたいときの条件分岐
  2. 指定したカテゴリが子カテゴリの場合、親カテゴリ一覧ページは一番上にあるカテゴリを表示するので、カテゴリ一覧の分岐タグの使いかたも
  3. 表示範囲を細かい条件で指定したいとき用に、条件式の書きかた
  4. これら複数の指定方法

読んだらPHPを書いて挙動を確認。実際やることで分岐範囲・内容が把握できて分岐タグ・冒頭の条件式が使えるように!

スポンサーリンク
スポンサーリンク

is_category()in_category()の違い

『記事で指定したカテゴリin_category()』はカテゴリをあてた投稿ページの事で、is_category()と文字が似てるけど違いは以下のとおり。

is_category()はカテゴリ一覧のアーカイブ毎の分岐

カテゴリ一覧ページの事

カテゴリ一覧は例えば/category/wordpress/などのこと。

この場合、親カテゴリの下層に入った『カスタマイズWordPress』という名前・スラッグwordpressにカテゴリ指定された記事一覧です。

  • 子カテゴリ一覧(アーカイブページ)上で分岐して表示を変えられる。

in_category()だと投稿ページ上で指定したカテゴリの各記事

カテゴリにWordPressと付けた記事を指定

分かりやすいのがパンくずリスト:ホーム > 親カテゴリ > 子カテゴリ > 孫カテゴリ で、カテゴリを指定したとき

子カテゴリを開いたカテゴリ一覧ページで、孫カテゴリに属さない子カテゴリ。『子カテゴリに割り当てられた記事』の表示の変更したい時に使う分岐タグがin_category()です。

ポイント
かうたっく
かうたっく

記事単位がin_category()ね。

説明ぼうや
説明ぼうや

(アーカイブ)カテゴリ一覧is_category()だよ。

in_category()で指定した記事カテゴリが、カテゴリ一覧に反映するとき・しないときの例

WPカテゴリ一覧で同じカテゴリ記事が一番上にある状態

  • 子カテゴリ一覧(アーカイブページ)の一番上に子カテゴリがあるとき

in_category()で子カテゴリを指定したものが、カテゴリ一覧にも反映する。

WPカテゴリに孫カテゴリ指定記事が一番上にある状態

  • 子カテゴリ一覧の一番上に孫だと表示されない

in_category()で子カテゴリを指定しても、カテゴリ一覧では反映しない

カテゴリ一覧is_category()で指定する必要があるワケです。※この見出しはカテゴリを複数していない状態で確認したもの。

投稿ページの指定is_single()の説明

is_single()は固定ページでもアーカイブページでもなく、投稿ページの記事単位で指定ができる分岐タグです。

私のページではトップページにある記事一覧がそれにあたり、WordPress管理画面で言えば『投稿』-『投稿一覧』から書いたページを指定したいとき使います。

WordPressその他分岐タグ紹介

カテゴリ・投稿ページ以外にも多くの分岐タグがあります。

  • TOPページやカテゴリ一覧・記事内などでページ分割された2ページ目以降を指定したい時
    • is_paged()
  • シングルページ(固定ページ・投稿ページ・添付ファイルページ)のとき
    • is_singular()
  • トップ(フロント)ページ(固定ページや記事一覧のトップ)のとき
    • is_front_page()で指定すればOK!

たくさんあるので、以下リンク先を参考にしてください。

LINK条件分岐タグ|WordPressCodex日本語版

条件分岐タグをPHPファイルに書く、コードの書きかた

分岐タグを使うとき通常PHPファイルに書き込みますが、その書きかたをチェックしてくださいね。

functions.phpでの書きかたは割愛しますが、それ以外の親テーマや子テーマに導入されたPHPファイルに書くときを想定して、一番シンプルな書きかたをチェックしてください。

以下はページのIDを指定する方法を紹介します。※ページID確認、スラッグ指定・複数ページ指定方法などは後述。

PHPを触るときエラー防止のため、テスト環境で試してから実装することをオススメします!

LINKWordPressのサブドメインでテスト環境を作る手順

in_category()カテゴリIDを指定する書きかた

記事で指定したカテゴリの投稿記事に反映する条件分岐は以下の通りです。コメントに内容を書いてると分かりやすいのでコメントをいれてます。

<?php // カテゴリ名:子カテゴリ、スラッグ:ko-category、カテゴリid:3とする
if ( in_category( 3 ) ) { ?>
	<!-- ここにHTMLタグ -->
<?php } ?>

phpコードの説明

WordPressのhoge.phpなどにPHPとHTMLを書くとき、HTML以外は<?php?>で囲ってください。

phpは半角記号・文字スペースで。全角だと即エラー(命令が表示されない:エラーコードを表示すれば原因を特定しやすい)、タグ・記号が1つ抜けても同じ

<?php if in_category( 3 ) { ?>

()・ピンク()はセット。1つでも閉じカッコなど忘れるとエラー。

<?php if ( in_category( 3 ) ) { ?>
<div>ここに内容</div>
<?php } ?>

PHPの赤文字{はココからPHPで命令するよ、}はココまでが命令ね!って意味。これも抜けるとエラー。

この場合、カテゴリID3のときは『ここに内容』と出力されるって事。

スラッグ名を指定する書きかた

ページ毎のIDではなくスラッグを入れたいとき、'slug-name'のように囲めばOKです。

<?php // カテゴリ名:子カテゴリ、スラッグ:ko-category、カテゴリid:3とする
if ( in_category( 'ko-category' ) ) { ?>
	<!-- ココにHTMLタグ、スラッグko-category(カテゴリid:3)で出力 -->
<?php } ?>

is_category()のカテゴリIDを指定した書きかた

アーカイブページ:カテゴリ一覧is_category()を使ったときPHPファイルに書くのは以下の通り。

<?php // カテゴリ名:子カテゴリ、スラッグ:ko-category、カテゴリid:3とする
if ( is_category( 3 ) ) { ?>
	<!-- ここにHTMLタグ -->
<?php } ?>

上記▲と以下▼が同じ内容であれば後述の条件式を使って、一気にコードを書くことができます。

<?php // カテゴリ名:子カテゴリ、スラッグ:ko-category、カテゴリid:3とする
if ( in_category( 3 ) ) { ?>
	<!-- ここにHTMLタグ -->
<?php } ?>

is_single()で記事IDを指定した書きかた

投稿ページis_single()で表示など分岐指定したいときは以下の通り。

<?php // 投稿ページURL:domain.com/hoge/、投稿id:48とする
if ( is_single( 48 ) ) { ?>
	<!-- ここにHTMLタグ -->
<?php } ?>

投稿ページの記事IDが48のときに出力される。タグは任意のモノを入れてください。

WordPressページIDの確認方法

WordPressではカテゴリ・タグ・固定ページ・投稿ページなど作成するごとに独自のページIDが自動的に振り分けられます。

カテゴリ一覧などでも同じ

そのIDの確認方法は管理画面にある『投稿』-『投稿一覧・カテゴリ・タグ』、固定ページ一覧で確認できます。

投稿ページ記事一覧からページIDを確認

または該当ページの管理画面のURLを見ても分かります。このページを例に挙げると17217が記事IDです。

https://domain.com/wp-admin/post.php?post=17217&action=edit

ポイント
かうたっく
かうたっく

一覧ページなら知りたいリンクをonマウスすれば、ページを開かなくてもIDの数字が見れるよ^^

説明ぼうや
説明ぼうや

方法が2通りあると、チェックしやすい方法を選べて良いね!

分岐タグ()内に、複数ページを指定する書きかた

複数指定の場合は分岐タグ:例えばin_category()のカッコ内にarray( 2,3,85,108 )array( 'ko-cat','oya-cat' )などと指定します。

  • arrayの()内、指定の区切り半角コンマ,を入れる
<?php // 子カテゴリ:ko-category:IDは3・親カテゴリ:oya-cat:IDは2とする
if ( in_category( array( 2,3 ) ) ) { ?>
	<!-- カテゴリID:2と3のとき出力したいコード -->
<?php } ?>
チェック!

if ( in_category( array( 2,3,9 ) ) ) { ?>

カッコの閉じ忘れに注意❦((()))

  • 例2:is_single()など…も同様。
<?php // 投稿ページID:82,237,1285のみを指定
if ( is_single( array( 82,237,1285 ) ) ) { ?>
	<!-- 記事ID:82,237,1285のとき出力したいコード -->
<?php } ?>

if文でWordPress分岐タグ、条件式を使うPHPの書きかた

条件式は『いつ使えば良いか』と言えばif文で条件分岐して、さらに条件をしぼりたいときです。

『このページ・カテゴリ』は『別途表示を変えたい』『この条件のみ表示させない』『このページ以外で表示させたい』など、細かく条件を指定したいとき超便利です!

『○○の条件で且つ・さらに××条件』で使う&&

見出し通りですが、使用例を挙げてみますね。

  • 記事に付けたカテゴリIDが107、且つ(さらに条件をしぼり)投稿ページのとき
<?php // カテゴリIDが『107』で『投稿ページ』だけ出力
if ( in_category( 107 ) && is_single() ) { ?>
	<div  class="">
	カテゴリIDが107の投稿ページだけに出力される内容
	</div>
<?php } ?>

カテゴリIDが107の投稿ページだけに出力される内容

『○○または△△の条件』で使う||

カテゴリIDが107のページでも出力したいし、投稿ページIDが60,78,81のときだけでも出力したい場合につかえる||アレコレソレ状態のときですね。

<?php // カテゴリIDが107か投稿ページIDが60,78,81のときだけ出力
if ( in_category( 107 ) || is_single( array( 60,78,81 ) ) ) { ?>
	<div class="">
	カテゴリIDが107で表示・投稿ページID60,78,81でも表示
	</div>
<?php } ?>

 

『指定した条件以外』の時使う!

例えば、特定記事以外に表示したい時など使える!の使用例は以下の通り。

<?php // 出したくないIDを指定:該当記事のみ非表示
if ( !is_single( array( 3,86,74,48,75 ) ) ) { ?>
	<div class="">
	記事IDが3,86,74,48,75以外のとき表示される
	</div>
<?php } ?>

条件式&&||!を複合して使う例

  1. 出力したくない記事内カテゴリを指定!in_category( array( 3,86,74 ) )
  2. さらに条件追加
    • 1の非表示条件にマッチしている、該当投稿記事は表示すると指定&& is_single( array( 57,60 ) )
  3. だけどカテゴリ一覧には表示したい。|| is_category( array( 30,70 ) )

このような詳細条件を指定して分岐。同一の出力をまとめたい時に有効な書きかたです。参考までのコードは以下の通り。

<?php // 出したくないカテゴリIDを指定
if ( !in_category( array( 3,86,74 ) )
	// さらに条件追加:上記カテゴリでも記事IDが57,60には表示
	&& is_single( array( 57,60 ) )
// 上記以外は出力
	// 複数カテゴリ一覧IDが30,70には表示
	|| is_category( array( 30,70 ) ) ) {
// 以下出力する内容?>
	<div class="">
	上記条件のとき表示
	</div>
<?php } ?>

if (
~ 中略 ~
) {の()内に詳細な条件を入れ詳細な分岐をした例ですね^^;

中略部分は条件を書いてるワケです。

!in_category( array( 3,86,74 ) )
// さらに条件追加:上記カテゴリでも記事IDが57,60には表示
&& is_single( array( 57,60 ) )
// 上記以外は出力
// 複数カテゴリ一覧IDが30,70には表示
|| is_category( array( 30,70 ) )

カッコの数に注意が必要

アドセンスで広告を非表示にしたい記事があるときの分岐タグ

アドセンスを表示していると、非表示にせざるを得ない状況があります。そんなときに使えるコードもついでに紹介しておきます。

  • 前提:例え

投稿ページIDを指定して、アドセンスを非表示にしたい。非表示にしたページに別の広告を出したい。など

  • コードの説明

記事IDが32と83以外のときアドセンスを表示。32と83はアドセンス以外の広告をだしたい。って場合。

<?php if ( !is_single( array( 32, 83 ) ) ): ?>
	<!-- アドセンス -->
	
<?php else: ?>
	<!-- アドセンス以外の広告コード -->
	
<?php endif; ?>

1行空いてる所に広告のスクリプトを入れるなどもできます。※広告でなくてもヘッダーや戻るボタンの画像の変更とか、でもいけますよね。

  • カテゴリ一覧IDが10のときis_category(10)
  • カテゴリ一覧スラッグがslugのときis_category('slug')
  • 複数のときの書きかたif ( is_single( array( 5,8,47 ) ) )

こんな感じで分岐タグを指定して、ページ・カテゴリ毎に表示の変更ができる事が分かってもらえたらと思います。

おまけはおしまい❦

さいごに

PHPを触らなくてもCSSで表示させる方法も沢山あります。CSSが長くなるので、サクッと分岐タグを使ってみるのもアリかと思うので、記事にしてみました。

PHPに書いたら分岐内容が正しいか、指定したページ関連の表示確認してくださいね。間違った指定をすれば2個表示される。なぁんて事もあるので。

条件分岐の内容はサイトオーナーさんが1番理解してるはずなので、正確に指定してくださいね^^

おすすめ

このカスタマイズのHTMLは以下、Cocoonのメイン上にひと言コメントを置くカスタマイズなどにも活用できます。

LINKCocoon、main上『通知メッセージ』をカテゴリ・ページ毎に変更するカスタマイズ!HTML編

それでは、かうたっくでした❦

 

コメント

個人情報の取り扱いについてはリンク先をご確認ください。

ご了承・ご理解いただいた上でコメントお待ちしております❦

トップへ戻る