2016-08-11 78 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例如鍵入:帖子的本地主機/ myblog /標籤=音樂沒有一個是顯示,即使我在「標籤」字段中有「音樂」幾個帖子。 我想首先解決這個簡單的案例,因爲我duno什麼我做錯了。

另外,我想解決方案,如果我想在文本字段「標籤」,例如:「音樂,電影,流行音樂,生活」多重價值,所以當人們輸入搜索「生活電影」時,他們獲得所有職位與那些特定的領域。感謝您對文本的更大空間感到抱歉。任何幫助將appriciated。

回答

0

正如我從你的解釋中瞭解到的,「標籤」只是一個自定義字段,而不是分類標準。所以你不需要檢查任何查詢變量,只需使用「元查詢」即可。

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()) { 
    $query->set('meta_query', array(array(
     'key' => 'tag', 
     'value' => sanitize_text_field($_GET['tag']) 
    ))); 
    } 
} 

如果你使用這個片段中,頁面上主查詢將包含從$ _GET自定義字段鍵「標籤」和值只有職位。我已經添加了一些檢查,以確保我們沒有查看管理面板,修改後的查詢是頁面上的主要查詢。否則可能會有些混亂。另外我清理了GET值。

現在,你的第二個問題。這是可能的,但我們需要修改我們的片段。首先,讓我們來決定,人們如何要求多個標籤?我更喜歡使用逗號。所以URL看起來像這樣:localhost/myblog /?tag =音樂,電影。現在讓我們把它發送到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」「tag」字段的「音樂」值的帖子。如果你想顯示帖子,只有所有問標籤,將「關係」從「或」更改爲「和」。希望有所幫助!

+0

感謝您的回覆,但似乎仍然沒有工作,都沒有例子。現在,我沒有在我的functions.php中手動註冊acf函數,我只是通過管理面板添加它們,也許我必須註冊它們。? 對不起,打擾了你,這似乎很簡單,但只是不適合我。 –

0

編輯:我發現了實際的問題......我無法命名我的自定義字段「標記」,因爲某些原因www.example.com/?tag=music提供了一些奇怪的錯誤。將自定義字段的名稱更改爲其他任何內容(例如,標記),並且它可以工作。奇怪,我希望有人覺得它有用。

相關問題