2017-10-19 14 views
0

カスタム投稿のリストをフィルタリングできる3つの選択ボックスがあり、オプションのすべてまたはすべてを選択してから「フィルタ」ボタンをクリックし、ページを再読み込みしてフィルタにかけた変数をクエリ文字列としてのURLこれは、私が持っている2つのカスタム分類法と完全に正常に動作します:フィルタリング後にWordpress WP_Queryをカスタムフィールド値で変更するにはどうすればよいですか?

$categories = array('company-sector', 'company-location'); 
foreach ($categories as $category) { 
    if (isset($_GET[$category]) && !empty($_GET[$category])) { 
     $query['tax_query'][] = array(
      'taxonomy' => $category, 
      'field'  => 'slug', 
      'terms'  => $_GET[$category] 
     ); 
    } 
} 

しかし、第3のフィルタ(ACFで作成したカスタムフィールド)に同じロジックを使用して、ポストのリストは変更されません。

if (isset($_GET['company-status']) && !empty($_GET['company-status'])) { 
    $query['meta_query'][] = array(
     'key' => 'company_status', 
     'value' => $_GET['company-status'], 
    ); 
} 

私は手動でそうのような初期WP_Queryにそれを追加した場合、このメタクエリは正常に動作します:

$query = array(
    'post_type' => 'company-post', 
    'posts_per_page' => $posts_per_page, 
    'orderby' => 'title', 
    'order' => 'ASC', 
    'meta_query' => array(
     array(
      'key' => 'company_status', 
      'value' => 'acquired' 
     ) 
    ) 
); 

しかし、変数FRを取得した後、最初のクエリにそれを追加しようクエリ文字列がうまく動作しないようですが、ここで何が間違っていますか?

//編集

これでも働いている:

$query = array(
    'post_type' => 'company-post', 
    'posts_per_page' => $posts_per_page, 
    'orderby' => 'title', 
    'order' => 'ASC', 
    'meta_query' => array(
     array(
      'key' => 'company_status', 
      'value' => $_GET['company-status'] 
     ) 
    ) 
); 

をだから、どのように私は初期WP_Queryにmeta_queryを追加てるとは何かをする必要があります...

+0

var_dump($ _GET ['company-status'])は期待した結果を得ていますか? – Stender

+0

var_dump()は試していませんが、echo $ _GET ['company-status'];私が見たいものを返します。 – JFK1980

+0

var_dump()が戻っています:string(7) "current"。 ( 'current'または 'acquired'は現在のところ2つのオプションですが、バックエンドにはACFラジオボタンとして表示されます) – JFK1980

答えて

0

あなたのfunctions.phpでpre_get_postsを使うことができると思います。

// Load our function when hook is set 
add_action('pre_get_posts', 'js-modifying-main-query'); 

function js-modifying-main-query($query) { 
    $status = $_GET['company-status']; 
    if($status && $status != ""){ 

     if(!is_admin() && $query->is_main_query() && $query->query_vars['post_type'] == 'company-post') { 

      $query->set('meta_key', 'company_status'); 
      $query->set('meta_value', $status); 

     } 

    } 
} 

テストしていないエド - それはちょうど最初の考え。

// EDIT

クエリ変数を表示するには、これを使用することができます:

global $wp_query; 
var_dump($wp_query->query_vars); 
+0

他に何もなければ、これは正しい軌道に乗るはずです。 – Stender

+0

実行する関数を宣言するときに ' - 'を '_'に変更しなければならない場合でも、それを得ることができます:未定義インデックス:post_type – JFK1980

+0

hmm - クエリの変数をvarにダンプして、 – Stender

0

私はまだ私の最初のコードが機能しない理由わからないんだけど、私が管理しています

$status = false; 
if (isset($_GET['company-status']) && !empty($_GET['company-status'])) { 
    $status = array(
     'key' => 'company_status', 
     'value' => $_GET['company-status'], 
    ); 
} 

$query = array(
    'post_type' => 'company-post', 
    'posts_per_page' => $posts_per_page, 
    'orderby' => 'title', 
    'order' => 'ASC', 
    'meta_query' => array($status) 
); 

//編集

でも:私はそれを必要とするものを行うように見えるの回避策を思い付きます

$status = false; 
if (isset($_GET['company-status']) && !empty($_GET['company-status'])) { 
    $status[] = array(
     'key' => 'company_status', 
     'value' => $_GET['company-status'], 
    ); 
} 

$query = array(
    'post_type' => 'company-post', 
    'posts_per_page' => $posts_per_page, 
    'orderby' => 'title', 
    'order' => 'ASC', 
    'meta_query' => $status 
); 

をしかし、すぐに、私はこれを試してみて、それが失敗します。:これが働いている

if (isset($_GET['company-status']) && !empty($_GET['company-status'])) { 
    $query['meta_query'][] = array(
     'key' => 'company_status', 
     'value' => $_GET['company-status'], 
    ); 
} 

$query = array(
    'post_type' => 'company-post', 
    'posts_per_page' => $posts_per_page, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 
0

あなたはcompany-statusのために間違った値を押してください。

if (isset($_GET['company-status']) && !empty($_GET['company-status'])) { 
    $query['meta_query'][] = array(
     array(
      'key' => 'company_status', 
      'value' => $_GET['company-status'], 
     ) 
    ); 
} 

が...これを行います

Array 
(
    [0] => Array 
     (
      [key] => company_sector 
      [value] => val1 
     ) 

    [1] => Array 
     (
      [key] => company_status 
      [value] => val2 
     ) 

    [2] => Array 
     (
      [0] => Array 
       (
        [key] => company_status 
        [value] => val3 
       ) 

     ) 

) 

あなたはmeta_query配列にこの方法をプッシュする必要があります。パラメータrelationがommitedされている場合

$query['meta_query'][] = array(
    'key' => 'company_status', 
    'value' => $_GET['company-status'], 
); 

また、クエリがすべてをチェックしますキーと値 - しかし、私はあなたがこれを知っていると仮定します。

+0

私はすでに両方の方法を試してきましたが、私は最初の質問でこれを忘れました。私はこれを反映するために私の質問を更新しました。私はまた、あなたが提案したことに基づいていくつかのさらなるテストで私の答えを更新しましたが、それはまだ動作していないようです。 また、 'relation'が必要な場合、それは私がmeta_queryにプッシュする方法を変更しませんか? – JFK1980

+0

あなたの '$ query'変数の' print_r'を投稿してください。問題がどこにあるのかと思います。 –

関連する問題