几个月来,我一直在wordpress中寻找多个类别的搜索选项,最后我想到了这个。
我刚刚发现wordpress允许多个标记,这意味着如果在URL中键入
http://yourblog.com/tag/tag1+tag2
然后,它将返回所有带有标签的帖子,标签1
AND 标记2
但如果你打字
http://yourblog.com/tag/tag1,tag2
然后它将返回所有具有tag1的帖子
OR 标记2
同样的事情现在也适用于类别
http://yourblog.com/category/cat1+cat2
和http://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
不起作用。
有人能帮我吗?我真的很想这样做
仍在等待
最合适的回答,由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网友: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;
}