WordPress如何使用只搜索帖子的第二个表单?

我的WordPress网站上有两个表单:search.blade.phpblog-search.blade.php

search.blade.php位于网站标题中,并搜索所有内容类型。

blog-search.blade.php仅用于搜索帖子类型。

我使用以下代码让它只搜索博客文章:

    function searchfilter($query) {
 
    if ($query->is_search && !is_admin() ) {
        $query->set('post_type', 'post');
    }
 
return $query;
}
 
add_filter('pre_get_posts','searchfilter');

可以理解,这既适用于earch.blade.php,也适用于博客搜索,但我只希望它适用于博客搜索。

我认为,如果我添加一个条件来检查只存在于博客搜索上的隐藏输入的值,我可以让它工作,但我不知道如何做到这一点。

以下是我的博客-earch.blade.php代码:

<form action="{{ get_bloginfo('url') }}" method="GET" class="blog-search-form">
    <input type="search" name="s" placeholder="Search the blog...">
    <input type="hidden" name="search-type" value="normal" />
    <span class="icon-search"></span>
</form>

有没有办法可以实现如下内容:

 function searchfilter($query) {
 
    if ($query->is_search && !is_admin() && INPUT TYPE == HIDDEN ) {
        $query->set('post_type', 'post');
    }
    ...

所以只有博客搜索才能搜索文章,而我的主搜索像往常一样工作?我尝试了implementing this,但没有成功,所以我认为条件可能会有所帮助。

search.blade.php,以防万一:

<form action="{{ get_bloginfo('url') }}" method="GET" class="search-form">
    <input type="search" name="s" placeholder="Search the site">
</form>

解决方案

您可以通过多种方式进行设置。我个人总是使用AJAX方法来查询数据库,但如果您想使用query_vars方法,因为您已经在考虑它并在您的问题中提出了建议,那么您可以这样做:

所以这将是您的html表单:

<form method="GET">
    <input type="search" name="s" placeholder="Search the blog...">
    <input type="hidden" name="onlyblog" id="onlyblog" value="yes" />
    <span class="icon-search"></span>
    <button type="submit">Search</button>
</form>

然后在php端,条件检查的onlyblog值如下:

function searchfilter($query) {

$query_type = isset($_GET['onlyblog']) ? sanitize_text_field($_GET['onlyblog']) : "";
 
    if ($query->is_search && !is_admin() && !empty($query_type) && 'yes' == $query_type) {
        $query->set('post_type', 'post');
    }
 
return $query;
}

如果您能让它工作,请让我知道!

相关文章