固定链接和查询变量搜索之间的结果不同

时间:2012-05-24 作者:0x61696f

我正在用自己定制的主题运行WordPress 3.3.2,该主题有4种自定义帖子类型。目前,我正在寻找一种方法来替换example.com/blog/?s=findme 具有example.com/search/findme.

我已经看到WordPress已经可以通过使用permalink搜索来生成搜索结果,但它给出的结果也包括所有其他自定义帖子类型,而使用?s= query var只检索博客文章。

如何将permalink搜索生成的搜索结果限制为仅包含常规博客帖子,并过滤掉自定义帖子类型?

2 个回复
最合适的回答,由SO网友:0x61696f 整理而成

我仍然没有找到两次搜索结果不同的原因,但我决定使用permalink搜索选项,并根据自己的需要进行调整。

以下是帮助我筛选搜索结果的简化片段:

function define_search_permissions() {
    global $wp_post_types;
    $wp_post_types[\'page\']->exclude_from_search = true;
    $wp_post_types[\'custom_post_type1\']->exclude_from_search = true;
}
add_action(\'init\', \'define_search_permissions\');
我宁愿把他们排除在外,而不是直接从register_post_type, 因为这些自定义帖子类型应该可以从受限成员区域进行搜索。

有点离题:这个问题有一个额外的复杂性,因为我正在创建一个双语博客,使用qtranslate,url预路径模式处于活动状态(即将链接转换为example.com/en/blog 等等)。通过使用htaccess重定向,我成功地使用附加的query var强制进行常规搜索,以重定向到pretty permalink版本。这可能不是最整洁的选择,但现在可以了。以下是执行此重定向的两行代码:

RewriteCond %{QUERY_STRING} ^s=(.*)$
RewriteRule ^(ro|en)/blog/$ /$1/search/%1? [R=301,L]
如果您不使用任何更改URL的多语言插件,代码将简化为:

RewriteCond %{QUERY_STRING} ^s=(.*)$
RewriteRule ^blog/$ /search/%1? [R=301,L]
最后一个?RewriteRule 声明故意放在那里。如果没有它,您的链接将example.com/search/findme?s=findme 而不是example.com/search/findme.

SO网友:Alex Lane

如果您根本不想搜索自定义帖子类型,可以添加

\'exclude_from_search\' => true
到您的注册参数。

结束