Wordpress, фильтр для изменения поискового запроса? - PullRequest
1 голос
/ 17 августа 2010

Мне было интересно, что это за фильтр для изменения поискового запроса в Wordpress?

Например, если кто-то вводит xxx, как я могу изменить его на yyy, прежде чем оно попадет в поисковую систему wordpress?

Приветствие.

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

Измените его, когда он попадет в WordPress, прямо перед тем, как WP запросит базу данных:

$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.

99 в add_filter заставляет его запускаться с опозданием, чтобы вы были последними, кто внес изменения в запрос (может быть важно в зависимости от того, какие другие плагины вы установили).

Ваш URL будет по-прежнему указывать исходный термин, но вы сохраните загрузку страницы. Если у вас сайт с высоким трафиком, вы не хотите перенаправлять, чтобы получить симпатичный URL.

0 голосов
/ 17 августа 2010

Вы не сможете изменить его до того, как перейдет в WordPress без использования правил перезаписи htaccess.Однако вы можете создать собственный фильтр для ручного перенаправления определенных поисковых терминов в новые поисковые запросы с помощью стандартного перенаправления браузера.Мне пришлось использовать функцию определения местоположения javascript в моем примере, потому что я не мог понять, как перехватить переменную поиска с помощью фильтра, прежде чем что-либо было выведено в браузер (таким образом, ограничив мою способность использовать встроенную функцию перенаправления wordpress или стандартПереадресация заголовка php.)

Следующий код будет выполнять любые поиски «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);
...