你有没有在一个有很多自定义帖子类型的WordPress网站上工作过?好吧,WordPress搜索是一场灾难,这就是许多博客使用Google自定义搜索的原因。好吧,我们正在开发一个拥有大量资源文章,视频,书籍和博客文章的网站。使用默认的WordPress搜索只是没有削减它。使用谷歌搜索也不是一个可行的选择。因此,我们决定创建一个高级搜索表单,允许用户通过复选框限制自定义帖子类型来选择他们想要搜索的网站区域。用户可以组合他们的搜索查询,最重要的是,我们制作了复选框以及搜索查询。这使用户可以准确地看到他们搜索的内容,并且可以修改参数。在本文中,我们将向您展示如何利用WordPress搜索查询的强大功能在WordPress中创建高级搜索表单,并通过自定义帖子类型限制结果。

您需要做的第一件事是打开searchform.php文件或存储搜索表单的任何位置。然后在表单代码中添加以下字段:

<input type="hidden" name="post_type[]" value="articles" />
<input type="hidden" name="post_type[]" value="post" />
<input type="hidden" name="post_type[]" value="videos" /> 
<input type="hidden" name="post_type[]" value="books" />  

不要忘记将值替换为自定义帖子类型。上面的代码基本上将搜索结果限制为这些帖子类型。好吧,如果你注意到我们几乎添加了所有可用的帖子类型,除了页面。那么,有一个很好的理由这样做,我们将在以后讨论。因此,请确保使用主搜索按钮包含您要搜索的所有帖子类型。这些字段是隐藏的,因此用户看不到这些。

接下来打开您的search.php文件并将以下代码粘贴到您的循环内容上方,以便您的用户可以在顶部看到选项。

<form role="search" method="get" id="searchform" action="<?php echo home_url( "/" ); ?>">
<input type="text" name="s" id="s" <?php if(is_search()) { ?>value="<?php the_search_query(); ?>" <?php } else { ?>value="Enter keywords &hellip;" onfocus="if(this.value==this.defaultValue)this.value="";" onblur="if(this.value=="")this.value=this.defaultValue;"<?php } ?> /><br />
	
<?php $query_types = get_query_var("post_type"); ?>
    
<input type="checkbox" name="post_type[]" value="articles" <?php if (in_array("articles", $query_types)) { echo "checked="checked""; } ?> /><label>Articles</label>
<input type="checkbox" name="post_type[]" value="post" <?php if (in_array("post", $query_types)) { echo "checked="checked""; } ?> /><label>Blog</label>
<input type="checkbox" name="post_type[]" value="books" <?php if (in_array("books", $query_types)) { echo "checked="checked""; } ?> /><label>Books</label>
<input type="checkbox" name="post_type[]" value="videos" <?php if (in_array("videos", $query_types)) { echo "checked="checked""; } ?> /><label>Videos</label>
    
<input type="submit" id="searchsubmit" value="Search" />
</form>

这将在输入框内的搜索查询中添加搜索结果上方的搜索框。这还将检查在查询中搜索哪些帖子类型,并选中相应的复选框。请记住,我们如何在隐藏字段中添加所有帖子类型。好吧,我们添加它只是为了让我们可以运行in_array检查并保持选中复选框。没有关于如何做到这一点的文档,所以这是我们找到的最佳方式。下面是搜索框的外观预览:

Advanced Search Form

从那里,用户可以随意修改参数。

评论被关闭。