自定义搜索以仅搜索当前自定义帖子类型

时间:2012-12-28 作者:jb510

我有3个自定义帖子类型,希望搜索小部件只搜索它当前所在的自定义帖子类型。例如,如果查看cpt\\U 1(单个或存档),并且有人使用侧栏中的搜索小部件,则只应返回cpt\\U 1的结果。类似地,查看cpt\\u 2和搜索应仅返回cpt\\u 2结果。

我试过这个:

<?php
// functions.php 
function search_cpt1( $query ) {
    if ( $query->is_search ) {
        $query->set( \'post_type\', array( \'cpt1\' ) );
    }
    return $query;
}   

function search_cpt2( $query ) {
    if ( $query->is_search ) {
        $query->set( \'post_type\', array( \'cpt2\' ) );
    }
    return $query;
}   

if ( \'cpt1\' == get_post_type() ) {
    add_filter( \'pre_get_posts\', \'search_cpt1\' );
}

if ( \'cpt2\' == get_post_type() ) {
    add_filter( \'pre_get_posts\', \'search_cpt2\' );
}

?>
我也尝试过这种方法,但没有成功:

<?php
function jc_search_cpts( $query ) {
    if ((\'cpt1\' == get_post_type()) && ( $query->is_search )) {
            $query->set( \'post_type\', array( \'cpt1\' ));
    }
    if ((\'cpt2\' == get_post_type()) && ( $query->is_search )) {
            $query->set( \'post_type\', array( \'cpt2\' ));
    }
    return $query;
}
add_filter( \'pre_get_posts\', \'jc_search_cpts\' );

3 个回复
SO网友:JItendra Rana

您需要修改searchform。主题目录中的php文件。

要搜索当前帖子类型的帖子,请在表单中添加以下代码!

$post_type = get_post_type();
if($post_type){
    echo \'<input type="hidden" name="post_type" value="\'.$post_type.\'" />\';
}

SO网友:Andrew Schultz

你也可以使用WordPress过滤器pre_get_posts. 根据需要添加或删除立柱类型。

function es_search_filter($query)
{

    if ($query->is_search && !is_admin()) {
        $query->set(\'post_type\', [\'pages\', \'posts\']);
    }

    return $query;
}

add_filter(\'pre_get_posts\', \'es_search_filter\');

SO网友:Shawn

我可以通过添加以下内容创建自定义搜索表单来实现这一点:

<input type="hidden" name="post_type" value="attorney" />
因此,我的搜索表单如下所示:

<form role="search" method="get" id="searchform" action="<?php echo home_url( \'/\' ); ?>">
<input type="hidden" name="post_type" value="attorney" />
<input type="text" value="" name="s" />
<input type="submit" value="Search" />
</form>

结束

相关推荐

Remove some pages from search

在我的网站上,我希望一些页面不能通过搜索表单进行查询(这样当我有类似www.ex.com/?s=banana的内容时,它们就不会出现)有没有一种方法可以从搜索结果页面中“删除”页面(而不是盲目地执行if Is\\u page(id),display:none的条件)