まず仕様として、カスタムフィールドで「トップページに表示フラグ」にチェックが入ったいるものだけを表示するコンテンツがありました。
構築初期には問題なかったのですが、運用している中で、チェックを外しているにも関わらず表示されるものが出るようになりました。
なぜそうなるのかを確認したところ、記事複製プラグインの「Duplicate Post」で複製すると記事(post_id)に紐づくmeta_keyが複数存在していました。
※Duplicate Postのバージョン:2.6
meta_id -> 10 / post_id -> 5 / meta_key -> top_display / meta_value -> 1 meta_id -> 11 / post_id -> 5 / meta_key -> top_display / meta_value -> 0
発生する流れとしては、
・「トップページに表示フラグ」にチェックを入れた記事を複製する
・複製された記事の「トップページに表示フラグ」のチェックを外す。
管理画面の記事編集からフラグのチェックを切り替えて保存すると meta_id -> 11 が書き換わり、meta_id -> 10 についてはずっと残ったまま消すことが出来ません。
その為、カスタムフィールドの絞り込みクエリの抽出条件に引っかかってしまい、表示されてしまいます。
'meta_query' => array( array( 'key' => 'top_display', 'value' => '1' 'compare' => '=' ) )
解決方法としては、
【複製機能を使わない】 or 【都度、SQLから重複データを消す】
しか手はありませんでした。
もっと簡単に解決できる方法を知っている方がいましたら教えてください。
SQLで重複したデータを抽出するクエリは、下記を参考にしてください。
SELECT sub.* FROM ( SELECT COUNT(*) AS counter, post_id FROM `wp_postmeta` WHERE meta_key = 'top_display' GROUP BY post_id HAVING counter > 1 ) AS main LEFT JOIN `wp_postmeta` AS sub ON sub.post_id = main.post_id AND sub.meta_key = 'top_display'
コメント