如果搜索查询与任何帖子的标题完全匹配,我想重定向

时间:2012-04-16 作者:Mauriya

我使用的是WordPress 3.3.1和本系统的新版本。如果查询与某篇文章的文章标题完全匹配,我想将搜索查询重定向到该文章。我还希望它在任何搜索查询函数和挂钩或过滤器之前运行。我在查询中做了一些更改。包含文件夹中的php

$search .= "{$searchand}(($wpdb->posts.post_title LIKE \'{$n}{$term}{$n}\'))";
并编写了如下插件函数:

add_action(\'template_redirect\', \'single_result\');
function single_result() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1) {
            wp_redirect( get_permalink( $wp_query->posts[\'0\']->ID ) );
        }
    }
}
我还有一些函数需要在这个搜索查询之后运行,并且有“get\\u header”挂钩。到目前为止,搜索查询匹配和重定向未匹配并返回aspected。大多数情况下,它会滑出,并且不会完全重定向。我想搜索和重定向是非常完美的。我们将非常感谢您的帮助。非常感谢。

1 个回复
SO网友:s_ha_dum

首先,不要破解核心文件(除非您打算提交补丁:)。

其次,您所做的并不是真正检查标题是否与搜索字符串完全匹配。你在做什么?检查是否只有一个结果。这并不意味着标题匹配。撤消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 区分大小写。

<小时>

结束

相关推荐

Search engine for WP as CMS

我目前正在运行WP作为CMS,我一直在寻找一个合适的搜索引擎插件来索引该网站。要求如下:基于自定义分类法(aka,能够根据分配给帖子的分类法向下钻取)的方面帖子Fast不显示实际帖子,而是一个摘录:-显示最近的评论日期,作者我遇到过Apache SOLR插件,它做得很好,除了按自定义分类法进行面处理。它按类别、标签和作者进行分面,但类别太复杂了,我不妨重新考虑如何将类别应用于帖子。有人对此有经验吗?谢谢