Не удается назначить значение мета-запроса на основе регулярного выражения для запроса wp


У меня есть текст, отправленный для поиска на сайте WordPress: "text123". Из этого текста я хотел бы извлечь число, состоящее из 3 цифр (123), и выполнить поиск сообщения, в котором есть "ключ" = "предложение", и значение этого ключа равно 3-значному числу, извлеченному из текста поиска (в данном случае "123"). Я не могу заставить его работать со следующим кодом:

preg_match('/[0-9]{3}/',get_query_var( 's' ), $matches);
$off = $matches[0];

$meta_query = 
    array(
        'key' => 'offer',
        'value' => $off,
        'compare' => '='
    );
$query->set( 'meta_query', $meta_query );

Запрос $, похоже, просто игнорирует "мета_запрос" и возвращает результаты, которые содержат весь искомый текст ("text123").

Когда я присваиваю такое значение:

$query->set('posts_per_page', '4');

Это работает нормально, и в результатах поиска отображаются только 4 сообщения. Но с meta_query это никак не влияет на $query, что бы это ни было.

Кто-нибудь знает, что не так?

Author: Mateusz Kozłowski, 2019-01-06

1 answers

Мета-запрос должен представлять собой массив массивов (каждый массив содержит одно условие).

Поэтому вместо

$meta_query = 
    array(
        'key' => 'offer',
        'value' => $off,
        'compare' => '='
    );
$query->set( 'meta_query', $meta_query );

Должно быть

$meta_query = array(
    array(
        'key' => 'offer',
        'value' => $off,
        'compare' => '='
    )
);
$query->set( 'meta_query', $meta_query );

ПС. Было бы неплохо проверить, возвращает ли preg_match значение true - если совпадения нет, я думаю, ваш код не будет иметь особого смысла;)

 1
Author: Krzysiek Dróżdż, 2019-01-06 18:29:56