【WordPress】get_posts() が急に取得できなくなった

プラグイン

以前は取得で来ていた get_posts() が急に取得できなくなった際の対応の備忘録です。

スポンサーリンク

結論

カスタム投稿やカスタムタクソノミーの作成補助プラグイン「Custom Post Type UI」(CPT UI)でのインポートの失敗が原因でした。

CPT UI のインポートでは、変更がないものも含めてすべてインポートする!
インポートコンテンツに記載がないものは削除されてしまう。

発生していた現象

一部の get_posts() で戻り値が空になる。

原因解析

急に取得できなくなった get_posts() は一部だけだったので、正常なままのものと異常なもののクエリを比較しました。

正常な get_posts() のクエリキー

  • post_type
  • numberposts
  • suppress_filters
  • orderby
  • order
  • date_query
      • after
      • before
      • inclusive

異常な get_posts() のクエリキー

  • post_type
  • numberposts
  • suppress_filters
  • orderby
  • order
  • date_query
      • after
      • before
      • inclusive
  • tax_query
      • taxonomy
      • field
      • terms

「tax_query」を指定していると取得に失敗しているようです。

あー、タクソノミー、
CPT UI プラグインでインポートしたな
心当たりしかない……

と思って、WordPress メニューで確認したら、インポート前にあった既存の投稿タイプとタクソノミーがなくなっていました。
インポート直後は、追加分が正しく追加されているのは確認したのですが、既存のものへの影響まで確認していませんでした。

問題操作

なぜタクソノミーなどが消えたかというと、CPT UI プラグインのインポート操作について勘違いをしていたのが原因でした。

本来の動作

インポートコンテンツ
ありなし
既存
コンテンツ
あり上書き削除
なし追加何もせず

想定していた動作

インポートコンテンツ
ありなし
既存
コンテンツ
あり上書き何もせず
なし追加何もせず

変更がないものも含めてすべてインポートしないといけないところ、勘違いで追加分だけインポートしたせいで、既存のものが削除されていました。

対応処置

消えたカスタム投稿、タクソノミーの正確な名前など記憶していたので、CPT UI プラグインで再度登録しなおしたら、get_posts() も正常に取得できるようになりました。

消えていたカスタム投稿、タクソノミーに属する投稿記事やタームは残っており、関係も切れておらず、名前さえ正確なら上記の操作だけで復元可能でした。

今回は名前を憶えていたので大事に至らずよかったですが、何はともあれ、インポートなどを行う際は、バックアップを取っておくのがおすすめです。