2017-10-19 134 views
0

我有三個選擇框允許過濾自定義帖子列表,可以選擇任何或全部選項,然後單擊「過濾器」按鈕,然後重新加載頁面並將過濾的變量添加到該URL作爲查詢字符串。這適用於這兩個自定義分類完全沒有問題,我有:如何在過濾後使用自定義字段值修改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] 
     ); 
    } 
} 

然而,在使用第三過濾器(與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後om查詢字符串似乎不工作,我在這裏做錯了什麼?

//編輯

即使這是工作:

$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'] 
     ) 
    ) 
); 

所以它必須是事做我如何追加meta_query初始WP_Query ...

+0

如果您的var_dump($ _ GET ['company-status'])是否獲得了預期的結果? – Stender

+0

還沒有嘗試var_dump(),但是echo $ _GET ['company-status'];返回我期待看到的。 – JFK1980

+0

var_dump()返回:string(7)「current」。 ('當前'或'已獲得'是目前的兩種選擇,在後臺顯示爲ACF單選按鈕。) – JFK1980

回答

0

我想你可以使用pre_get_posts這個在你的functions.php

// 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); 

     } 

    } 
} 

沒有測試編輯它 - 只是一個初步的想法。

//編輯

要查看您的查詢的變量,你可以使用這個:

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數組是這樣的:

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

另外,如果參數relation是中省略,查詢將檢查所有鍵和值 - 但我假設你知道這一點。

+0

我已經試過兩種方法,我忘了在我的第一個問題中提到這一點。我已更新我的問題以反映這一點。我還根據您的建議更新了我的答案,並進行了一些進一步的測試,但似乎仍然無法正常工作。 此外,如果需要'關係',那麼這不會改變我如何推到meta_query? – JFK1980

+0

請發佈您的'$ query'變量的'print_r',我認爲這就是問題所在。 –

相關問題