首先,不要破解核心文件(除非您打算提交补丁:)。
其次,您所做的并不是真正检查标题是否与搜索字符串完全匹配。你在做什么?检查是否只有一个结果。这并不意味着标题匹配。撤消core hack,然后执行以下操作:
function redir_title_match($a) {
if (is_search()) {
global $wp_query;
$s_str = $wp_query->query_vars[\'s\'];
foreach ($wp_query->posts as $p) {
if ($p->post_title == $s_str) {
wp_safe_redirect(get_permalink($p->ID));
exit();
}
}
}
}
add_filter(\'template_redirect\',\'redir_title_match\');
那个
is 区分大小写。如果你不想那样用
strtolower 通过更改第6行:
if ($p->post_title == $s_str) {
=>
if (strtolower($p->post_title) == strtolower($s_str)) {
此外,此查询在WordPress搜索之后运行,该搜索与OP请求的内容不匹配。但是,必须运行
a 因此使用默认查询是有意义的。
@Rarst在下面的评论中指出,这不是一个完全可靠的解决方案。我相信这是真的,尽管我不知道这在实践中有多重要。然而,这里有一个应该可靠的选项,但它会向搜索页面添加一个查询。
function redir_rigid_title_match() {
if (is_search()) {
global $wp_query,$wpdb;
$s_str = $wp_query->query_vars[\'s\'];
$m = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_title = %s",$s_str));
if (!empty($m)) {
wp_safe_redirect(get_permalink($m));
exit();
}
}
}
add_filter(\'pre_get_posts\',\'redir_rigid_title_match\');
如上所述
is 区分大小写。
<小时>