以前は取得で来ていた 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() も正常に取得できるようになりました。
消えていたカスタム投稿、タクソノミーに属する投稿記事やタームは残っており、関係も切れておらず、名前さえ正確なら上記の操作だけで復元可能でした。
今回は名前を憶えていたので大事に至らずよかったですが、何はともあれ、インポートなどを行う際は、バックアップを取っておくのがおすすめです。