Search result based on URL

时间:2019-01-22 作者:Back Office

目前我正在使用bellow函数显示自定义帖子类型的搜索结果。

add_filter( \'pre_get_posts\', \'tgm_io_cpt_search\' );
function tgm_io_cpt_search( $query ) {
    if ( $query->is_search ) {
        $query->set( \'post_type\', array( \'lp_course\', \'lp_lesson\', \'products\', \'portfolio\' ) );
    }
    return $query;
}
我需要更高级的东西。我想设置post_type 基于转诊参数。

假设客户正在搜索http://mywebsite/course, 然后,上述函数应更改并仅返回诅咒查询:

$query->set( \'post_type\', array( \'lp_course\' ) );
我试着通过HTTP_REFERER, 但没有成功。

$host =  $_SERVER["HTTP_REFERER"];

if ( $host == \'https://mywebsite/course\' ) {
    if ( $query->is_search ) {
        $query->set( \'post_type\', array( \'lp_course\') );
    }
} else {
    if ( $query->is_search ) {
        $query->set( \'post_type\', array( \'lp_course\', \'lp_lesson\', \'products\', \'portfolio\' ) );
    }
    return $query;
}

1 个回复
SO网友:Tom J Nowell

你不应该也不应该依赖推荐人(他们可能被剥夺、隐藏,或者只是彻头彻尾的谎言)

相反,还有其他选择

例如提交到post类型存档:

<form action="/courses" method="get">
    <input type="test" name="s"/>
</form>
或将查询变量绑定为隐藏输入:

<form action="" method="get">
    <input type="test" name="s"/>
    <input type="hidden" name="post_type" value="course" />
</form>
甚至只是:

mywebsite.com/?s=foo&post_type=course