例えば、新着情報記事のうち、ピックアップニュースとして設定したものは「ピックアップニュース」の欄に表示し、一般ニュース欄には、それ以外のニュースを掲載しようとした場合、ACFで「真/偽」チェックボックスを使って切り分けすることができる。
今回は、途中から仕様変更でそのようにしたときのお話です。
ピックアップニュース欄には
'meta_key' => 'pickup_flag', 'meta_value' => true ,
として問題無く動作した。
一方で一般ニュースでは、ループの条件指定を
'meta_key' => 'pickup_flag',
'meta_value' => 0 ,
としたところ、古い記事が出てこない。過去の記事は改めて更新をかけないと、フィールド自体が存在しないためと思われる。
そこで、「フィールド自体が存在しない」条件を追加して
'meta_query' => array(
'relation' => 'OR',
array( // フィールドが存在しない(一度も保存されていない場合)
'key' => 'pickup_flag',
'compare' => 'NOT EXISTS',
),
array( // チェックされていない
'key' => 'pickup_flag',
'value' => 0 ,
'compare' => '=',
),
),
と、二つの条件をORでつないで解決!