Wordpress,过滤器来更改搜索词?

时间:2010-08-17 10:12:27

标签: php wordpress search plugins filter

我想知道过滤器是什么来改变Wordpress中的搜索词?

例如,如果有人输入xxx,我怎么能在进入wordpress搜索引擎之前将其更改为yyy?

干杯。

2 个答案:

答案 0 :(得分:4)

在WP查询数据库之前,当它到达WordPress时更改它:

$search_replacements = array(
    'find' => 'replace',
    'find2' => 'replace2',
    'var' => 'foo'
);
function modify_search_term($request_vars) {
    global $search_replacements;
    if (!empty($request_vars['s']) && !empty($search_replacements[$request_vars['s']])) {
        $request_vars['s'] = $search_replacements[$request_vars['s']];
    }
    return $request_vars;
}
add_filter('request', 'modify_search_term');

这将允许您处理尽可能多的条件并添加到$ replacements数组。

add_filter中的99是为了让它运行得晚,所以你是最后一个对查询进行更改的人(可能很重要,具体取决于你安装的其他插件)。

您的网址仍会显示原始字词,但您可以节省网页加载费用。如果您拥有高流量网站,那么您不想重定向只是为了获得一个漂亮的网址。

答案 1 :(得分:0)

在进入wordpress之前你无法改变它而不使用htaccess重写规则。但是,您可以创建自定义过滤器,以使用标准浏览器重定向手动将特定搜索词重定向到新的搜索查询中。我不得不在我的例子中使用javascript定位函数,因为我无法弄清楚如何在将任何内容输出到浏览器之前通过过滤器捕获搜索变量(从而限制了我使用内置wordpress重定向功能或标准的能力php header redirect。)

以下代码将搜索“test”并将其重定向到“smickie”搜索。这个组合起来非常快速和肮脏,因此您需要对其进行修改以满足您的需求,但希望这可以让您开始朝着正确的方向前进。

function redirect_searchterm() {
    if (is_search()) {
    $search_query = get_search_query();
        if ($search_query == "test") { 
        $new_searchquery = "smickie";
        ?>
            <script type="text/javascript">
            <!--
            location.replace("<?php echo get_option('siteurl') . '/?s=' . $new_searchquery .'&submit=Search'; ?>");
            -->
            </script>
        <?php
        }
    }
}
add_action('wp_head', 'redirect_searchterm', 1);