2015-04-04 28 views
0

在我的博客頁面上,我有2個默認的wordpress搜索表單,其中1個應該搜索所有內容,1個應該只搜索帖子。如何使用pre_get_posts定位特定的搜索表單?

我設法改變來查詢,以適應我的pre_get_posts的需求,但它改變了它的兩個搜索表單

function exclude_pages($query) { 
    if ($query->is_home() && $query->is_main_query() && !is_admin()) { 
    $query->set('post_type', 'post'); 
    } 
} 

add_action('pre_get_posts', 'exclude_pages'); 

我怎麼可以指定該功能只改變了查詢的搜索形式在側邊欄?

回答

1

將一個隱藏字段添加到其中一個搜索表單中,然後檢查pre_get_posts中是否設置了一個值。

裏面的側邊欄添加表格:

<input type="hidden" name="posts-only" value="1" /> 

然後改變這:

if ($query->is_home() && $query->is_main_query() && !is_admin()) { 
    $query->set('post_type', 'post'); 
} 

要:

// Check if posts only value has been set and equal to 1. Return if not. 
if (! isset($_GET['posts-only']) || 1 !== $_GET['posts-only']) { 
    return false; 
} 

if ($query->is_home() && $query->is_main_query() && ! is_admin()) { 
    $query->set('post_type', 'post') ; 
}