ページが "未分類" かどうか正確に調べる

in_category の問題点

Wordpress ではある投稿/固定ページがどのカテゴリに分類されるかを調べるために in_category() 関数を利用します。 ところがこれを利用して "未分類" カテゴリを識別しようとすると問題が起こります。 in_category 関数は、そのカテゴリに分類される投稿、あるいはページが1つもないとき、常に false を返します。 したがって、"未分類" のページが存在しない場合には、この関数一つではあるページが "未分類" カテゴリに含まれていないことを確かに保障することができません。

また、"未分類" カテゴリも含めてどのカテゴリにも分類されなかった固定ページは、形式上 "未分類" となりますが(環境に依る)、 そのような場合にも、"未分類" のページとして認識する場合には、in_category 関数のみでは実現できません。

投稿ページにカテゴリを設定しない場合には更新時に"未分類"カテゴリが選択されます。 一方で固定ページの場合は設定されないままです。

そこで次の二つの条件でこの問題を解決します。

  1. 一ページ以上の未分類カテゴリに分類されたページが存在し、それが対象のページに割り当てられているか
  2. 何れのカテゴリも設定されていないかどうか。

実際のソースコードは次のようになります。

$undef_category = (count(get_the_category()) == 0) || in_category('1');
if($undef_category == true)
{
    未分類カテゴリである。
}
else
{
    未分類カテゴリでない。
}

これを is_undefined_category 関数などとして functions.php などに含めても良いと思います。