在搜索中包括分类

时间:2019-10-13 作者:Ronald Langeveld

(对WordPress来说是个新手,但我是React/NodeJS开发人员)

我有一个基本的搜索功能,可以搜索自定义post_type (listings).

它使用内置的标准get_search_query 因此它只能找到listing - 我们希望搜索也能通过分类法进行搜索。

搜索URL如下所示,http://localhost:8888/?s=New+York&post_type=listings - 基本的

这个post_type=listings 定义为表单中的隐藏输入,例如<input type="hidden" name="post_type" value="listings" />

我们在每个listing 例如,locationtag.

在google了很多次之后,我认为你不能简单地通过添加额外的标签来搜索自定义分类法——至少分类法没有那么神奇,我必须在我的函数中编写一个脚本。php。

关于从哪里开始编写自定义查询,有什么建议吗?

1 个回复
最合适的回答,由SO网友:majick 整理而成

首先,您希望使查询键可用,以便以后可以检查它们:

add_action( \'init\', \'custom_add_query_vars\' );
function custom_add_query_vars() {
    add_query_var( \'location\' );
    add_query_var( \'tag\' );
}
那么您要设置tax_query 通过筛选WP查询:

add_filter( \'pre_get_posts\', \'custom_search_tax_query\' );
function custom_search_tax_query() {

    // check this is a search query with post type of \'listings\'
    if ( is_search() && get_query_var( \'post_type\') 
    && ( get_query_var( \'post_type\' ) == \'listings\' ) ) {

        // check for location query var
        if ( get_query_var( \'location\' ) ) {
            $location_query = array(
               \'taxonomy\' => \'location\',
               \'field\'    => \'slug\',
               \'terms\'    => get_query_var( \'location\' ),
            );
        }

        // check for tag query var
        if ( get_query_var( \'tag\' ) ) {
            $tag_query = array(
               \'taxonomy\' => \'tag\',
               \'field\'    => \'slug\',
               \'terms\'    => get_query_var( \'tag\' ),
            );
        }

        // create the tax_query array
        if ( isset( $location_query ) && isset( $tag_query ) ) {
            $tax_query = array( \'relation\' => \'AND\', $location_query, $tag_query );
        } elseif ( isset( $location_query ) ) {$tax_query = array( $location_query );}
        elseif ( isset( $tag_query ) ) {$tax_query = array( $tag_query );}

        // finally set the tax_query
        if ( isset( $tax_query ) ) {$query->set( \'tax_query\' => $tax_query );}
    }
}
然后,您可以将搜索表单中的输入传递给键locationtag 并获得您想要的回复帖子。:-)

备注:

无需返回$query 通过引用传递时从筛选器中删除$tax_query 考虑到relation 参数-是否relation 是否设置tag, 如果您实际使用的是标准标记分类法,则需要将其更改为post_tag (标准标记的分类名称)中$tag_query, 但在这里,我假设您添加了一个额外的分类法,实际上称为tag.

相关推荐

MySQLI_QUERY():MySQL服务器已离开以进行Curl请求

我创建了一个WordPress插件,激活后在jquery Datatable中显示结果。我们正在通过CURL Post获取结果。帖子URL是ASP。Net应用程序。该插件是为在帖子中添加我的短代码后遇到以下错误的客户创建的。客户端使用的是优雅主题的Divi(最新版本),WordPress 5.2.2运行在Apache/PHP 7.2.21上此错误仅显示在添加了快捷码的帖子页面上:警告:mysqli\\u query():MySQL服务器已消失在/homepages/10/d241347454/htdocs