新年あけましておめでとうございます。
新年早々2022年1月6日に、WordPress 5.8.3がリリースされました。今回のリリースでは4件の脆弱性が修正されています。どれも重めの脆弱性なので速やかな更新が推奨されるアップデート内容となっています。
https://webgaku.net/jp/wordpress/wordpress-5-8-3/
WordPress 5.8.3にアップデートしたら記事一覧が表示されなくなった・・・!
基本的にマイナーアップデートは自動更新を推奨します。
私が仕事で携わっているWordPress案件においても、自動更新で5.8.3にアップデートしたわけなんですが、なんと記事一覧が表示されないという事態に陥りました。
不具合の例と対処法
余談ですが、該当のサイトは、かなり昔にWordPressの実装部分を外部の制作会社に依頼していました。今回不具合をきっかけにテーマの作りを洗い出したところ、色々と危うい作りになっていることを確認しました。WordPress案件ではありがちな話ですが、安いという理由だけで依頼するのは危険ということです。
閑話休題
記事が一覧が表示されなくなったコード
該当のサイトではアーカイブテンプレートなどで記事一覧が表示されなくなりました。
コードを再現すると概ね以下のような感じです。
$args = array(
'post_type' => ポストタイプ名,
'tax_query' => array(
array(
'taxonomy' => タクソノミー名,
'terms' => スラッグ名,
),
),
);
$query = new WP_Query( $args );
実は上記のコードは間違っているんですが、この状態でも今まで普通に表示されていました。
どこが間違っているかというと、クエリのtax_queryの絞り込み条件を「taxonomy」と「terms」だけ指定して、termsの値をスラッグ名にしている点です。
termsはデフォルトだとタームIDで判定されます。なので、本来はスラッグ名を入れても該当する記事は存在しないわけです。(スラッグ名とタームIDが同じなら引っかかるけど普通は違うよね)。
WordPress 5.8.3のアップデート内容の中にスラッグの脆弱性が解消が含まれていました。
これの影響でフィールドを指定せずタームの絞り込み条件をスラッグ名にしていると表示されなくなったようです。
なので、タームをスラッグ名で絞り込み行う場合は、以下のように必ずフィールドで「slug」を指定しましょう。
$args = array(
'post_type' => ポストタイプ名,
'tax_query' => array(
array(
'taxonomy' => タクソノミー名,
'field' => 'slug',
'terms' => スラッグ名,
),
),
);
$query = new WP_Query( $args );
クライアントから記事が表示されなくなったと連絡が来て、結構焦ったわけなんですが、理由が分かればあっけないものでした。
もし同じ事象が発生している方がいれば、参考にしてみてください。