2016-08-11 9 views
0

私はちょうど答えを見つけることができないし、私の特定のケース(または私が見つかりましたが、それを認識しませんでした)に関する関連記事を見つけることができません。Wordpress pre_get_posts高度なカスタムフィールドでフィルタリング

私は普通のブログ記事を持っています。私は1単語だけ "音楽"(タグはテキストタイプ)のカスタムフィールド名 "タグ"を持っています。

「タグ」で「音楽」を持っているすべての記事を選択するための私のPHPは次のとおりです。

add_filter('query_vars', function($vars) { 
$vars[] = 'tag'; 

return $vars; 
}); 


add_action('pre_get_posts', function ($query) { 
if (!empty($_GET)) { 

    if ($tag = get_query_var('tag', false)) { 
     $meta_query[] = array(
      'key' => 'tag', 
      'value'  => $tag, 
      'compare' => '=' 
     ); 
    } 

    $query->query_vars['meta_query'] = $meta_query; 
} 
}, 1); 

さて、私は例えば、URLを入力する場合:?ポストのlocalhostの/ myblog /タグ=音楽のどれもありません私が「タグ」フィールドに「音楽」のある記事はほとんどありません。 私はこの単純なケースの解決策を最初に得たいと思います。

また、「音楽、映画、ポップ、人生」といったテキストフィールドの「タグ」に複数の値を設定したい場合は、ソリューションを希望します。検索で「ライフフィルム」を入力すると、それらの特定のフィールド。どうもありがとうございました。どんな助けも訴えられるでしょう。

答えて

0

あなたの説明からわかるように、「タグ」はタクソノミーではなくカスタムフィールドです。だから、あなたはどのクエリvarをチェックする必要はありません、単に "メタクエリ"を使用して、それだけです。

このスニペットを使用すると、ページのメインクエリには、カスタムフィールドキー「タグ」と$ _GETの値を含む投稿のみが含まれます。いくつかのチェックを追加しました。私たちが管理パネルを表示していないことを確認して、変更されたクエリはページのメインクエリです。それ以外の場合は混乱するかもしれません。また、GETの価値を消化しました。

今、あなたの2番目の質問です。可能ですが、スニペットを修正する必要があります。まず第一に、人々が複数のタグをどのように求めているかを決めましょう。私はカンマを使うのが好きです。したがって、URLは次のようになります:localhost/myblog /?tag = music、film。 WPクエリに送信してみましょう:

add_action('pre_get_posts', 'make_my_query'); 

function make_my_query($query) { 
    if (!is_admin() && !empty($_GET) && isset($_GET['tag'] && $query->is_main_query()) { 
    $get_params = explode(',', $_GET['tag']); 
    $meta_query = array(
     'relation' => 'OR' 
    ); 
    foreach ($get_params as $param) { 
     $meta_query[] = array(
     'key' => 'tag', 
     'value' => sanitize_text_field($param) 
    ); 
    } 
    $query->set('meta_query', $meta_query); 
    } 
} 

それだけです。今、 "?tag = film、music"の投稿を求める人は、 "film" または "music"の値が "tag"フィールドの投稿を見ています。投稿を表示したい場合は、すべてという尋ねられたタグしか持っていないので、「OR」を「AND」に変更してください。希望が助けてくれる!

+0

お返事ありがとうございますが、まだ動作していないようです。今、私はfunctions.phpの中に手動でacfの関数を登録する必要はありません。管理パネルから追加しました。おそらく登録する必要があります。 あなたを気の毒にして申し訳ありませんが、これは簡単に思えますが、私にとってはうまくいきません。 –

0

編集:実際の問題が見つかりました。何らかの理由でwww.example.com/?tag=musicが奇妙なエラーを表示するため、カスタムフィールドに「タグ」という名前を付けることはできません。カスタムフィールドの名前を何か他のもの(タグなど)に変更しました。奇妙なことに、誰かが役に立つと願っています。

関連する問題