get_the_category()やget_the_terms()が効かない!そんな時はタームの順番入れ替えプラグインが原因かも


先日、当サイトで全てのタクソノミーの表示が消えました。
エラーでは無く、カテゴリーやカスタムタクソノミーのタームが全く登録されていないのと同じ状況です。

例えば、下のようなデフォルト投稿タイプのカテゴリー表示コードが全く動作しない状態です。

[php]
<?php if ( get_post_type() === ‘post’ ): //デフォルト投稿タイプ ?>
<?php
$category = get_the_category(); //カテゴリーは配列で取得
if ( isset( $category[0] ) ) { //カテゴリーの最初のひとつだけ表示
$category_link = get_category_link( $category[0]->term_id );
$category_name = $category[0]->cat_name;
$category_slag = $category[0]->category_nicename;

$link = ‘<a href="’ . $category_link . ‘" class="cat ‘ . $category_slag . ‘">’ . $category_name . ‘</a>’;
esc_html( $link );
}
?>
<?php endif; ?>
[/php]

こういったカテゴリーの表示も消えました。

まず一通り確認

get_the_category()やget_the_terms()を使ったコードが全て表示されず、エラーも吐き出さない状態。
コードは全て
[php]if ( isset( $category[0] ) ) {[/php]
のように、該当するタームがある場合のみ表示する条件なので、ターム自体が認識されていない状況です。

この場合考えられるのは
・PHPアップデートによる関数の制限またはバグ
・タクソノミーまたはタームが消えた
・WordPressアップデートによるエラー
・プラグインの干渉
諸々です。
サイト内の一部の不具合なので、サーバメンテナンス等の可能性はとりあえず除外して良いでしょう。

管理画面では、カテゴリーやカスタムタクソノミーのタームは問題無く存在していた為、次に
カスタム投稿タイプ操作プラグイン「Custom Post Type UI」を一旦停止して様子を見てみましたが、状況は変わらず。
そもそもデフォルトのタクソノミーである「カテゴリー」も「タグ」も取得できないので、カスタム投稿タイプやカスタムタクソノミーを操作する上記プラグインは関係無さそうです。

プラグインを疑う

簡易的なテストコードを作成し、タクソノミーの中身が入っているかどうかだけの判別をしても、「タームは無し」の状態なので、これは根本的に、WordPressがタクソノミーまたはタームを参照している場所が間違っている感じです。
つまり、get_the_category()を実行しても「カテゴリーとか全然無かったよ!」と、WordPress的にはきちんと答えを返している状況です。

なんとなく、タクソノミーの順番入れ替えプラグインが怪しいです。

『Simple Custom Post Order』というそのものズバリのプラグインを停止してみたところ、不具合が直りました。

普段は『Intuitive Custom Post Order』という同様のプラグインを利用していたのですが、テストで入れ替えていました。

さっそくサポートを確認したところ、似たような状況の質問がりました。
https://wordpress.org/support/topic/last-update-cause-dissapear-custom-taxonomies/

前回のアップデート後にタクソノミーの表示が消えたとのことです。
他に似たような報告は無さそうなので、複数の要因が重なった可能性があります。

対応方法

『Simple Custom Post Order』を削除して、再度インストールすることで問題が解決しました。

まとめ

・カスタム含めたタクソノミーのタームが存在しているのに
・get_the_category()もget_the_terms()も値を返さない時は
・記事やタームの順番入れ替え系のプラグインを確認


Blogカテゴリー一覧

WordPressウェブ制作・運用動画・クリエイティブ素材便利ツール便利ワザ子育てその他