get_posts с meta_compare='LIKE' не работает

7 июл. 2012 г., 04:20:34
Просмотры: 14.4K
Голосов: 6

Я использую следующий код:

$tolettpe = "Sale";//значение по умолчанию
if($_REQUEST['tolettype']) $tolettpe = $_REQUEST['tolettype'];
else if($_REQUEST['srch_type']) $tolettpe = $_REQUEST['srch_type'];
$args = array(
    'numberposts'  => $latestcount,
    'category'     => $catidstr,
  'meta_key'     => 'property_type',
  'meta_compare' => 'LIKE',
  'meta_value'   => $tolettpe.'%'
 );
$post_content = get_posts($args);

Значение в базе данных - 'Sale||', и в запросе нет переменных query string.

Однако запрос не возвращает никаких результатов.

Если я использую точное значение без meta_compare, то все работает.

Есть идеи, как это исправить?

0
Все ответы на вопрос 1
3
13

meta_compare Возможные значения: '!=', '>', '>=', '<', или '<='. Значение по умолчанию: '='

Если вам нужно использовать LIKE, необходимо создать meta_query, например:

$tolettpe = "Sale"; // значение по умолчанию
if($_REQUEST['tolettype']) $tolettpe = $_REQUEST['tolettype'];
else if($_REQUEST['srch_type']) $tolettpe = $_REQUEST['srch_type'];
$args = array(
    'numberposts'  => $latestcount,
    'category'     => $catidstr,
    'meta_query' => array(
        array(
            'key' => 'property_type',
            'value' => $tolettpe,
            'compare' => 'LIKE'
        )
    )
);
$posts = get_posts($args);

Сгенерированный запрос автоматически добавляет символы % вокруг искомого термина, поэтому нет необходимости добавлять их вручную в коде.

7 июл. 2012 г. 12:59:28
Комментарии

спасибо, я попробовал, но не получаю никаких результатов. Есть ли способ вывести сгенерированный запрос, чтобы я мог запустить его напрямую в базе данных для отладки?

inarilo inarilo
7 июл. 2012 г. 14:39:53

ок, нашел ответ на этот вопрос http://codex.wordpress.org/Editing_wp-config.php#Save_queries_for_analysis

inarilo inarilo
7 июл. 2012 г. 15:11:12

вообще мой изначальный метод тоже работает, проблема была в лишнем знаке %!

inarilo inarilo
7 июл. 2012 г. 15:22:25