为特定帖子类型创建自定义搜索

时间:2015-11-09 作者:Johann

好的,我们知道Wordpress附带了一个内置的搜索表单。但是,我创建了一个自定义归档页面,其中列出了特定帖子类型的帖子。我想集成一个搜索框,只搜索与该特定帖子相关的帖子。

我看到很多人以多种方式处理这一问题,但没有有效的例子。你知道我该怎么做吗?

谢谢

2 个回复
SO网友:thenomadicmann

要启用对自定义帖子类型存档的搜索,我使用pre_get_posts 钩将此代码添加到主题函数中。php文件。下面是一个在名为“的帖子类型”上启用搜索的示例;资源(&Q):

// Enable resource search
    add_action(\'pre_get_posts\',\'pk_enable_resource_search\', 1000);
    function pk_enable_resource_search( $query ) {

        if ( $query->is_archive(\'resource\') && $query->is_main_query() && ! is_admin() ) {

            $search = ! empty($_GET[\'rs\']) ? $_GET[\'rs\'] : false;

            //Check for custom search
            if($search) {
                $query->set( \'s\', $_GET[\'rs\'] );
            }
        }
    }
然后在存档页面上,您需要设置搜索表单:

<form class="archive-resource__search-form" action="<?php echo get_post_type_archive_link(\'resource\'); ?>">
            <input type="text" placeholder="Search Resources" value="<?php echo $search_term; ?>" name="rs">
            <button type="submit" class="far fa-search"></button>
</form>
最后,不要忘记在存档页面上查找和设置搜索词。将这些变量添加到搜索表单模板部件/归档模板的顶部:

$is_search   = ! empty( $_GET[\'rs\'] ) ? true : false;
$search_term = $is_search ? $_GET[\'rs\'] : \'\';

SO网友:Bruno Cantuaria

您可以编辑搜索表单,将其重定向到自定义存档页面。然后,在自定义存档页面代码中,可以检测何时触发搜索(使用$\\u POST或$\\u GET),并更改主查询以包含搜索词。类似这样:

搜索表单:

<form method="GET" action="<?php echo get_post_type_archive_link( $post_type ); ?>">
    <input name="s" type="text">
    <input type="submit">
</form>
存档:

<?php
if (isset($_GET[\'s\'])
    query_posts(\'s=\'. $_GET[\'s\']);

while ( have_posts() ) : the_post();
    //do stuff
endwhile;
?>

相关推荐

如何读取WordPress$Query关联数组(散列)键的值

WordPress编程新手(来自更为传统的环境),并试图了解其一些“独特”特性。我们的网站上有一个目录页,此代码驻留在functions.php, 如果条件为true,则调整结果。if( $query->is_post_type_archive( \'directory\' ) ){ ...//do stuff } 我想知道如何获取is_post_type_archive 这就是“目录”当我对值使用测试时。。。var_dumb($query->is_post