Advanced Custom Fieldsで「真/偽」を使ったときのmeta_queryの指定

WordPressのカスタムフィールドを作れるプラグインAdvanced Custom Fieldsの「真/偽」を使って、「チェックした記事は一覧に表示させない(meta_queryで除外する)」方法を調べるのにけっこう時間がかかったので、備忘録として。




その答えは、こうだ!!!

これで、「”check_flag”にチェックが入っていない記事」だけが表示されます。

しかし、ここで要注意なんですが、既にある程度記事がある段階で真/偽フィールドを追加した場合、このままだとうまく除外できません

なぜかというと、上記は具体的には「値がfalse(0)である記事のみ表示させる」という意味なんですが、なんと真/偽フィールドを追加する前から存在している記事は、チェックをしていない場合に入ってる値はfalseではなくNULLだからなんですね。
そもそも値が入っていないのです。

だから、そういった場合は上記に加え「NULLのやつも表示」って書く必要があります。

これでよし。

おまけで、「”check_flag”にチェックが入っている記事」だけ表示したい場合はこう。

まぁ、こっちは公式に書いてるんですけどね。

ついでにもう一つ、ちょっと応用編。

例えばindex.phpとかarchive-news.phpで、WP_QUERYを使っていない場合。(条件なしで普通にループさせている場合。)
こうなると、もし上記を実装するとなるとWP_QUERYを書かなきゃいけなくなって、カテゴリーページとか年別アーカイブも作って同じように実装して…ってやらなきゃいけないので、めちゃくちゃめんどくさいですよね。

そんなときは、functions.phpで以下のようにやっちゃいましょう。

これで、「post_typeがnewsの一覧(query)」で、同様の条件を指定することができます。

もしnews以外も同じ条件を指定したい場合は、post_typeを増やすだけです。
※$query->is_main_query()も入れないと、index.phpで適応されないみたいです。

これでぐっと楽になりました。
しかもなんと、RSSフィードにも表示されないみたいです!

以上、現場からでした。

よかったらこっちもどうぞ

現在はWordPressを使用してのWebサイト制作の需要が高く、小~中規模のコーポレートサイトをWordPressのオリジナルテーマでCM...