是的,这是可能的。
有多种方法可以实现这一点,可以创建自定义表单和工作流,也可以覆盖WordPress中的默认搜索模板,并提供一个可用于识别搜索请求和筛选应搜索的帖子类型的请求参数。
下面是如何覆盖WordPress搜索表单模板,该模板使用get_search_form()
作用
创建一个名为searchform.php
在主题中放置以下代码:
<form role="search" method="get" id="searchform"
class="searchform" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
<div>
<label class="screen-reader-text" for="s"><?php _x( \'Search for:\', \'label\' ); ?></label>
<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit"
value="<?php echo esc_attr_x( \'Search\', \'submit button\' ); ?>" />
</div>
</form>
在你的
functions.php
文件插入以下代码:
function filter_search_post_type($query) {
if ( $query->is_search && ! is_admin() && ! empty($_GET[\'search_post_type\']) ) {
$query->set( \'post_type\', array($_GET[\'search_post_type\']) );
}
}
return $query;
}
add_filter(\'pre_get_posts\',\'filter_search_post_type\');
要在主题中显示搜索表单的位置,请执行以下操作:
<?php get_search_form(); ?>
每次使用搜索表单进行搜索时,我们都会发送一个隐藏的输入值
studentinfo
请求变量名为
search_post_type
.
在pre_get_posts
钩子我们检查这是否是一个搜索请求,以及search_post_type
请求变量已设置且不为空。如果是这样,我们继续设置post_type
对于值的查询studentinfo
.
这种方法唯一的缺点是表单将仅限于在studentinfo
post\\u类型,因为我们在请求中传递回隐藏的输入值。
或者,不创建名为searchform.php
您可以创建一个名为studentinfo-searchform.php
然后将上面相同的表单代码粘贴到该文件中,并将其保存到主题目录中。
然后,在模板中希望表单显示的位置,您将调用:
<?php get_template_part(\'studentinfo-searchform\'); ?>
这将使您只能显示以下内容的搜索表单:
studentinfo
当您需要并且不影响默认搜索能力时。
当然,有更多的方法可以做到这一点,但让我们先从一些基本方法开始。