WordPress多类别搜索

时间:2011-08-29 作者:Niraj Chauhan

几个月来,我一直在wordpress中寻找多个类别的搜索选项,最后我想到了这个。

我刚刚发现wordpress允许多个标记,这意味着如果在URL中键入

http://yourblog.com/tag/tag1+tag2
然后,它将返回所有带有标签的帖子,标签1AND 标记2

但如果你打字

http://yourblog.com/tag/tag1,tag2

然后它将返回所有具有tag1的帖子OR 标记2

同样的事情现在也适用于类别

http://yourblog.com/category/cat1+cat2http://yourblog.com/category/cat1,cat2

但这只适用于类别和标签,我正在尝试搜索选项。

到目前为止,我编码了这个URL的工作位置(这意味着它将只在类别id 114中搜索HTML),

http://yourblog.com/?s=html&cat=114

在此URL中comma separator 效果很好,但不是+

我的意思是

http://yourblog.com/?s=html&cat=114,115

效果很好,但是

http://yourblog.com/?s=html&cat=114+115

不起作用。

有人能帮我吗?我真的很想这样做

仍在等待

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

问题是,在url中,“+”符号相当于一个空格,所以PHP就是这么看的。

如果在上使用操作parse_request 您可以这样做:

add_action( \'parse_request\', \'category_search_logic\', 11 );
function category_search_logic( $query ) {

    if ( ! isset( $query->query_vars[ \'cat\' ] ) )
        return $query;

    // split cat query on a space to get IDs separated by \'+\' in URL
    $cats = explode( \' \', $query->query_vars[ \'cat\' ] );

    if ( count( $cats ) > 1 ) {
        unset( $query->query_vars[ \'cat\' ] );
        $query->query_vars[ \'category__and\' ] = $cats;
    }

    return $query;
}
以上内容将通过在PHP在$\\u get参数中看到的空格上拆分类别ID来获取类别ID,并在类别ID之间传递“+”。

如果数组中有多个项,则必须是“and”样式的搜索,以便我们可以将数组从空间上的拆分传递到\'category__and\' 查询var,返回所有指定类别中的帖子。

SO网友:Anh Tran

尝试以下操作:http://yourblog.com/?s=html&cat[]=114&cat[]=115

顺便说一句,你为什么不用钩环呢pre_get_posts 筛选您的搜索?这比调整搜索URL要容易得多。

SO网友:stz184

@sanchothefat建议的解决方案是可以的,但在使用分页时会导致问题。例如,您有类似url的域。com/?s=&;cat=1+2。当你点击第2页时,URL变成了域名。com/?s=&;cat=1+2,但在wp includes/canonical中定义了redirect\\u canonical()。php尝试修改域的url。com/?s&;cat=12,这是不一样的。。。我发现重写category\\u search\\u logic()比研究redirect\\u canonical()逻辑并对其应用其他过滤器更容易。

这是我传递规范逻辑的方式:

function category_search_logic( $query ) {
    if ( ! isset( $_GET[\'categories\'] ) )
        return $query;

    // split cat query on a space to get IDs separated by \',\' in URL
    $cats = explode(\',\', $_GET[\'categories\'] );

    if ( count( $cats ) > 1 ) {
        unset($_GET[\'categories\']);
        $query->query_vars[ \'category__and\' ] = $cats;
    }

    return $query;
}

结束

相关推荐

Multi-site or categories?

我最近为一所大学的广播电台重新设计了一个网站,从Drupal切换到Wordpress。该网站基于广播电台,但每个专业节目也会有自己的博客。然而,我希望从主要内容到每个博客的布局都是一样的。分类或多或少会起作用,但当我想要博客的信息页面时,事情就变得棘手了,比如“关于”之类的。假设我有一个“现场”节目。我希望所有内容都是/live/page或/live/2011/06/post标题,但Wordpress只想发布帖子,我还没有找到任何可靠的permalink插件。我应该坚持使用类别吗?我怎样才能改善这种情况?