Как настроить search.php в wordpress, чтобы он мог искать ключевое слово и в мета-ключах?

Я пытаюсь настроить search.php таким образом, чтобы он также мог отображать сообщения, которые имеют ключевое слово поиска в значениях мета-ключа. Обратите внимание: я использую плагин Advance Custom Field, который использует метаключи.

Например, у меня есть мета-ключ под названием «лечение», и если пользователь вводит «моё лечение» в строке поиска и нажимает кнопку поиска, я хочу показать сообщения, в которых есть « мое лечение» ключевое слово его содержание и/или сообщения, которые имеют «моё лечение» в мета-ключе, называемом «лечение».

Я хочу работать с несколькими мета-ключами одновременно, например. "адрес". Я написал следующий код, но он просто сломал поиск. Может ли кто-нибудь сказать мне, что я делаю неправильно.

$args = array(
        'post_type'=> 'beauty_salon',
        's' =>$s,
        'meta_query' => array(
               array(
                  'key' => 'treatments',
                  'value' => $s,
                  'compare' => 'LIKE',
                ),
                array(
                  'key' => 'address',
                  'value' => $s,
                  'compare' => 'LIKE',
                ),
        ),
    );
    $query = new WP_Query( $args );

    // The Loop.......etc

Обратите внимание: мне нужен короткий пользовательский код, поэтому не предлагайте плагин. Я знаю, что многие делают то же самое.


person Imran    schedule 30.07.2013    source источник


Ответы (1)


Попробуйте использовать параметр «отношение» для meta_query.

Также я предлагаю вам использовать фильтр pre_get_posts для «взлома» поискового запроса, если вы используете фактический шаблон search.php для отображения элементов поиска, поэтому вы должны написать в файле functions.php вместо файла шаблона что-то вроде этого :

function search_filter($query) {
    if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_search) {
            $meta_args = array(
                'relation' => 'OR',
                array(
                    'key' => 'treatments',
                    'value' => $s,
                    'compare' => 'LIKE',
                ),
                array(
                    'key' => 'address',
                    'value' => $s,
                    'compare' => 'LIKE',
                ),
            );

            $query->set('post_type', 'beauty_salon');
            $query->set('meta_query', $meta_args);
        }
    }
}

add_action('pre_get_posts','search_filter');
person Ovidiu Iacomi    schedule 31.07.2013
comment
Я не хочу использовать search.php, но я новичок в WordPress, поэтому не знаю, как создать страницу, которая используется для пользовательского поиска. - person Imran; 31.07.2013