Я пытаюсь получить запрос, чтобы получить все сообщения meta_key
, которые не существуют, а затем создать его.
У меня возникают проблемы с поиском этих сообщений, так как проверяемый запрос не работает.
Вот код, который я использую, чтобы получить эти сообщения:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
Это ничего не возвращает, если нет сообщений с ключом colors
, но возвращает ids
сообщения с ключом, colors
когда этот ключ присутствует (противоположность того, что мне нужно). Я попробовал EXIST
вместо этого, но не повезло.
Если кто-то может подсказать мне правильный способ создания запроса, подобного тому, который мне нужен, я буду признателен за это.
Спасибо!
custom-post-types
wp-query
post-meta
JordanBel
источник
источник
Ответы:
Я провел еще какое-то тестирование с этим, и, честно говоря, не могу найти причину, по которой это не сработает (если код выше не является просто фрагментом кода, а реальный код подходит для моих примеров ниже). Однако я обнаружил пару вещей, которые могут привести вас в правильном направлении.
1) Сам по себе этот мета-запрос является эквивалентом «colors IS NULL», то есть он вернет сообщения, для которых не задан этот ключ в таблице postmeta. Это случай, показанный выше, и он должен был сработать.
2) До WordPress 3.9 установка индекса 'отношение' к 'ИЛИ' изменяет это условие. Это возвращает обратное. Не спрашивай меня почему. Это особенно важно при выполнении нескольких мета-запросов. Это означает, что изначально невозможно выполнить запрос к сообщениям, у которых для ключа 'colors' установлено значение 'blue' (или что-либо еще) или не установлено вообще. Приведенный ниже запрос игнорирует первое условие и возвращает только те из них, которые соответствуют второму условию.
3) Однако мы можем обмануть WordPress, используя первое условие, если мы установим «значение». Ему не нужно соответствующее значение (насколько я знаю, его игнорируют), но его необходимо установить, чтобы
NOT EXISTS
условие имело какой-либо эффект.Это было правдой до WordPress 3.9. Если вы все еще используете старую версию, это жизнеспособный обходной путь.
источник
EXISTS
ИNOT EXISTS
«ошибка» , который требуется указать значение, была зафиксирована в WP 3.9Используя пользовательский запрос, это сработало для меня:
источник