WordPressのquery_postsでmeta_valueに空文字列を使いたい

query_postsで
“meta_key=custom_field_name&meta_value=&meta_compare=!=”
のような「カスタムフィールドの値が空の記事を除外」した記事を抽出したくても、生成されるWHERE文が
(wp_postmeta.meta_key = ‘custom_field_name’)
といった感じで、meta_value部分の条件が出力されないんですね。
ということで、posts_whereフィルタを使って回避するコードを書いてみました。
[functions.php]


add_filter('posts_where', 'my_posts_where'), 10, 2);
function my_posts_where($where, $query) {
if (strpos($where, "_wp_empty") !== false) {
$where = str_replace('_wp_empty', '', $where);
}
return $where;
}

これで、
“meta_key=custom_field_name&meta_value=_wp_empty&meta_compare=!=”
のように条件を設定すればOK。

コメント

タイトルとURLをコピーしました