【どのページで機能する?】is_category()とin_category()を比較してみた!

(この記事は2021年11月25日に投稿されました。)

WordPressのコードを触っている人ならわかるかと思いますが、WordPressにはis_category()とin_category()という関数があります。

1文字違いだけのように見えますが、動きがとても似ており、何が違うのか一度は苦しめられたことがあるのではないでしょうか?

簡単に説明すると、is_category()は「カテゴリーページかどうかを判定する」ために使用し、in_category()は「カテゴリーに属しているかどうかを判定する」ために使用します。

そのため、is_category()とin_category()では目的によって使い方が異なりますので、機能するページもあれば、機能しないページがあります。

また、両方とも機能するページもあれば、両方とも機能しないページもあります。

今回はis_category()とin_category()はどこのページで機能するのか比較していきます。




is_category()とは

is_category()とは、表示されている「アーカイブ(カテゴリー)」が、引数で指定されたカテゴリーかどうか判定する関数になります。

簡単にいうと、カテゴリーページかどうかを判定するために使用したり、特定のカテゴリーを判定するために使用したりします。

is_category()について詳しく知りたい場合はこちらをご参考ください。

in_category()とは

in_category()とは、表示されたページが、引数で指定されたカテゴリーに属しているかどうかを判定する関数になります。

指定されたカテゴリーに属しているかどうかを判定しますので、引数に親のカテゴリページを指定すると、子カテゴリーも属していると判定されます。

そのため、カテゴリーページでも使用されますが、特に投稿記事で使用することが多いです。

is_category()とin_category()がどのページで機能するか比較してみた

is_category()とin_category()は、全てのページで機能するわけではありません。

カテゴリーを取得してから判断する関数になりますので、機能するページもあれば機能しないページもあります。

そのため、is_category()とin_category()を下記のphpファイルで機能するかどうかの比較を行ってみました。

・front-page.php
・category.php
・single.php
・sidebar.php
・page.php

「front-page.php」で比較してみた

まず、「front-page.php」機能するかどうかis_category()とin_category()で比較してみます。

試しに、テストサイトの「商品一覧」のカテゴリーを指定して使用してみます。

■ front-page.php

実行結果

is_category()とin_category()をfront-page.phpで比較してみた結果

topページには「商品一覧」のカテゴリーに属している記事が表示されていますが、is_category()では「is_category()を使用できません。」が表示され、in_category()では「in_category()を使用できます。」が表示されています。

そのため、top-page.phpではis_category()は機能しませんが、in_category()は機能することが分かります。

「category.php」で比較してみた

続いて、「category.php」で機能するかどうか、is_category()とin_category()で比較を行ってみます。

試しに、「お知らせ」のカテゴリーを指定して使用してみます。

■ category.php

実行結果

is_category()とin_category()をcategory.phpで比較してみた結果

お知らせのカテゴリーページでは「お知らせ」のカテゴリーを取得しているので、is_category()とin_category()では「is_category()を使用できます。」が表示されています。

そのため、category.phpではis_category()とin_category()の両方が機能することが分かります。

Sossy

カテゴリーページではカテゴリーを常に取得しているのでどちらの関数でも機能します。
しかし、1つ1つのカテゴリーに対して処理を行いたい場合は「is_category()」を使用し、子カテゴリーもまとめて処理の対象にしたい場合は「in_category()」を使用すれば良いかと思います。

「single.php」で比較してみた

続いて、「single.php」で機能するかどうか is_category()とin_category()で比較を行ってみます。

試しに、テストサイトの「商品一覧」のカテゴリーを指定して使用してみます。

■ front-page.php

実行結果

is_category()とin_category()をsingle.phpで比較してみた結果

投稿記事ページには「商品一覧」のカテゴリーに属している記事が表示されていますが、is_category()では「is_category()を使用できません。」が表示され、in_category()では「in_category()を使用できます。」が表示されています。

そのため、single.phpではis_category()は機能しませんが、in_category()は機能することが分かります。

「sidebar.php」で比較してみた

続いて、「sidebar.php」で機能するかどうか is_category()とin_category()で比較を行ってみます。

試しに、「メンバー紹介」のカテゴリーを指定して使用してみます。

■ sidebar.php

実行結果(「メンバー紹介」のカテゴリーページ)

is_category()とin_category()をsidebar.phpで比較してみた結果1

実行結果(「メンバー紹介」の投稿記事ページ)

is_category()とin_category()をsidebar.phpで比較してみた結果2

「メンバー紹介」のカテゴリーページにあるサイドバーにはis_category()では「is_category()を使用できます。」が表示され、in_category()では「in_category()を使用できます。」が表示されています。

また、「メンバー紹介」に属した投稿記事にサイドバーにはis_category()では「is_category()を使用できません。」が表示され、in_category()では「in_category()を使用できます。」が表示されています。

そのため、sidebar.phpではメインのページ次第になることから、is_category()とin_category()が機能するページもあればしないページのあるということが分かります。

Sossy

サイドバーはカテゴリーページや投稿記事ページの右側に表示されているため、is_category()とin_category()が機能するかしないかはメインのページ次第になります。
そのため、どのページのサイドバーとして表示するのかを理解した上で使用しましょう。

「page.php」で比較してみた

続いて、「page.php」で機能するかどうか is_category()とin_category()で比較を行ってみます。

試しに、テストサイトの「運営者情報」を表示してみます。

■ front-page.php

実行結果

is_category()とin_category()をpage.phpで比較してみた結果

固定ページはカテゴリーを取得することができないため、is_category()では「is_category()を使用できません。」が表示され、in_category()では「in_category()を使用できせん。」が表示されています。

そのため、page.phpではis_category()もin_category()も機能しないことが分かります。

まとめ

⚫︎ is_category()とは、表示されている「アーカイブ(カテゴリー)」が、引数で指定されたカテゴリーかどうか判定する関数になります。

⚫︎ in_category()とは、表示されたページが、引数で指定されたカテゴリーに属しているかどうかを判定する関数になります

⚫︎ is_category()とin_category()がどのページで機能するか比較してみた結果、下記の結果となった
・「front-page.php」ではis_category()は機能しないがin_category()は機能する
・「category.php」ではis_category()もin_category()も機能する
・「single.php」ではis_category()は機能しないがin_category()は機能する
・「sidebar.php」ではis_category()とin_category()は機能するかしないかはメインページ次第である
・「page.php」ではis_category()もin_category()も機能しない

コメントを残す

メールアドレスが公開されることはありません。