WordPress搜索特定帖子类型

时间:2016-03-07 作者:Moshiur Rahman

我正在做一个WordPress网站,并使用自定义的帖子类型“studentinfo”。我想建立一个搜索表单和搜索模板,只从特定的帖子类型studentinfo中检索搜索结果。有可能吗?

1 个回复
SO网友:Adam

是的,这是可能的。

有多种方法可以实现这一点,可以创建自定义表单和工作流,也可以覆盖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 当您需要并且不影响默认搜索能力时。

当然,有更多的方法可以做到这一点,但让我们先从一些基本方法开始。

相关推荐

如何修改WP_INCLUDE/BLOCKS/LATEST_posts.php

我是WordPress开发的初学者,希望得到一些帮助。我在一个简单的WordPress网站上工作。基本上,用户希望在主页上显示最新的帖子。我使用了最新帖子块,并将其设置为显示整个帖子内容,现在用户不希望帖子标题链接到单个帖子页面(因为帖子的内容显示在主页上)。如何安全地修改模板文件,使其像h2标记一样使用,而不是在主题中使用的href标记。我知道您可以创建子主题并修改wp_content 文件,但我不确定如何处理中的文件wp_include. 我读到一些关于修改functions.php 但我不确定,如果