WordPressの記事一覧をACFのキーで表示・非表示を制御

カスタマイズ案件のご要望

WordPressのトップページに新着記事一覧を表示している。
新着記事一覧には最新の記事だけ表示したい
過去記事の更新分は非表示化したい

というご要望へ対応しました。

この案件は、すでに数千件の記事が公開されているサイトについての依頼で、「新着に表示したくない記事の個別選択した数は少ない」というのが前提となっています。

この前提なので

’compare’ => ‘NOT EXISTS’

がポイントになっています。

ACFでカスタムフィールド、radio にて表示・非表示する、フィールド is_show 作成
pre_get_posts フックを作る
こんなfunctionを作った。

カスタムフィールドが「表示しない」でない記事を表示
カスタムフィールドのメタキー無い場合は、記事を表示

すでに数千記事があるが、is_show フィールドにデータが入っていない方が大半である

ポイント

  • pre get posts はfunctions.php でセットする
  • すでに複数の記事を保存後に、ACFのカスタムフィールドを導入すると、該当するキーの中身が無い場合は’compare’ => ‘NOT EXISTS’を使う
  • functions.php からクエリで制御できるので管理が簡単
  • meta_queryについての引用 引用元 公式リファレンス
  • meta_query (配列) – カスタムフィールドの複雑なパラメータ (バージョン 3.1 より利用可能)。
  • relation (文字列) – meta_query の中に2つ以上の配列を入れたときの論理的な関係。使える値は ‘AND’ と ‘OR’ です(デフォルト: ‘AND’)。ひとつだけ配列を入れるときは使わないでください。

meta_query には次のキーを持った配列をひとつまたは複数入れることができます

  • key (文字列) – カスタムフィールドのキー。
  • value (文字列|配列) – カスタムフィールドの値。配列を指定できるのは compare が ‘IN’, ‘NOT IN’, ‘BETWEEN’ または ‘NOT BETWEEN’ の場合です。WordPress 3.9 以上で compare に ‘EXISTS’ または ‘NOT EXISTS’ を指定する場合は value を省略できます。
  • (参考: bug #23268 の影響で、バージョン 3.9 より前では NOT EXISTS による比較を正しく動作させるために value が必要です。value パラメータに何らかの文字列を与えなければなりません。空文字列や NULL では動作しません。しかし他のどんな文字列でもトリックが効き、NOT EXISTS を使ったときに SQL に現れません。ピンとこなければ ‘bug #23268’ を見てみては?)。
  • compare (文字列) – テスト演算子。使える値は ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’ および ‘NOT EXISTS’ です。デフォルトは ‘=’ です。
  • type (文字列) – カスタムフィールドの値のタイプ。使える値は ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’ です。デフォルトは ‘CHAR’ です。’DECIMAL’ と ‘NUMERIC’ には有効桁数と小数点以下の桁数を指定できます(例: ‘DECIMAL(10,5)’ や ‘NUMERIC(10)’ が有効)。

外部リンク

ご相談・お問合せ

お気軽にどうぞ。