東京都府中市、九段下のWEB制作会社Maromaroのブログです

2017.08.21

hoshida

WordPress のサイト内検索からカスタムフィールドの値で投稿を除外する方法

オレだよ!オレオレ!Maromaroのhoshidaだよ!!

ブログ用のメモを見ていたら便利そうなコードが出てきたので記事にしました。

カスタムフィールドの値で記事の公開状態を制御している場合などに便利です。

fanctions.php に以下のコードを記述してください。

function change_posts_per_page($query) {
  //管理画面、メインクエリーでない場合はreturn
  if( is_admin() || ! $query->is_main_query() ){
     return;
  }
  
  //検索結果一覧だった場合はカスタムフィールドの値で除外処理  
  if ( $query->is_search()) {
    $query->set(
      'meta_query' , array(
        array(
        'key' => 'カスタムフィールド名',
        'value' => '値',
        'compare' => '!='
        )
      )
    );
    return;
  }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

「カスタムフィールド名」には除外に使用したいカスタムフィールドのフィールド名、「値」には除外したい値を記入してください。例えば「県」というカスタムフィールドのフィールド名が「prefecture」であり、「東京」が入力されている記事を除外したければ、「カスタムフィールド名」には「prefecture」を、「値」には「東京」を記入します。すると「東京」が設定されている投稿は検索結果から除外されます。

pre_get_posts アクションでクエリーの内容をコントロールでき、カスタムフィールドの値は meta_query に入っているので、そこに条件を記述すればカスタムフィールドの値で検索結果をコントロールできるわけです。

$query->is_search() の個所を変更すると検索結果以外のいろいろな一覧でも使用できるので、カスタムフィールドを利用していろいろと一覧の制御ができます。
pre_get_posts の扱い方は以下の記事が参考になるかと思います。

[WordPress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ

 

ではでは