Intereting Posts
Перезапись пользовательского типа сообщения Повторное повторение одного повторного изображения Повторяющиеся задания Cron Использование wp_next_scheduled / wp_schedule_event Как настроить подкатегории для страниц авторов? Интеграция пользователей Magento и WordPress Как изменить структуру постоянных ссылок для пользовательских типов сообщений и их таксономии? Где я могу найти тему с большим баннером Уведомлять пользователей, когда публикуется новое сообщение, исходя из их предпочтений Как заставить wp_enqueue_scripts загружаться в END <head>? Загрузка Javascript только при наличии конкретного содержимого в сообщении? ключи meta_query и липкие сообщения удалить форму поиска edit.php и заменить на мою собственную Обновление wordpress нарушило мои постоянные ссылки Экран пользовательского типа сообщений в Network Admin Почему номер телефона является гиперссылкой на настольных сайтах, в моем виджете?

meta_query для ключей, которые еще не установлены

Я пытаюсь запросить пользовательский тип сообщения для системы галереи. У меня есть флажок, чтобы установить галерею в качестве «признанной» галереи (настроенной через плагин More Fields). Если это отмечено, значение мета становится равным 1, а затем, если не отмечено, оно становится 0. Все хорошо. Однако, если окно никогда не проверялось, мета-ключ никогда не создается, то есть я не могу запросить NOT LIKE 1, потому что его не существует.

Запрос, который я хочу, состоит в том, чтобы вытащить 4 галереи, которые не отмечены как «1» в этом метазначении, а также те, которые вообще не имеют этого значения. Есть ли способ всегда добавлять новые сообщения по умолчанию для этого мета-ключа (т. Е. Всегда делать их 0 по умолчанию, если поле не отмечено) или есть способ запросить ключ, который еще не установлен?

Мой текущий запрос:

$args = array( 'post_type' => 'gallery', 'showposts' => 4, 'meta_key' => 'gal-ID', 'order_by' => 'meta_value', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'main-gal', 'value' => false, ) ), ) ); 

И я пробовал различные попытки с помощью 'compare' => 'NOT LIKE', '! =' И т. Д. И т. Д.

Есть идеи? Этот билет, кажется, подразумевает, что это то, что должно быть разобрано:

http://core.trac.wordpress.org/ticket/18158

Благодаря!

Эта массивная функция была немного пугающей, и я работал так: с двумя аргументами (которые исключают возможности)

 $args = array( 'meta_query' => array( 'relation' => 'OR', array( // new and edited posts 'key' => 'Set as Featured Post', 'compare' => '!=', 'value' => 1 ), array( // get old posts w/out custom field 'key' => 'Set as Featured Post', 'value' => '1', 'compare' => 'NOT EXISTS' ) ), 'posts_per_page' => 30 ); 

В соответствии с пользовательскими параметрами поля в Codex, сравнение специальных NOT EXISTS доступно с WP версии 3.5

Технически он создает что-то вроде следующего SQL-запроса в сообщениях:

 $posts = get_posts( array( 'meta_query' => array( array( 'key' => 'wrong', 'compare' => 'NOT EXISTS', ), ), ) ); 
 SELECT *,wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'wrong') WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') AND (wp_postmeta.post_id IS NULL) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 5 

Он работает путем присоединения мета-таблицы по предоставленному ключу и выбора только записей, где это не привело к содержательным данным ( IS NULL ). Таким образом, он работает только для случая, когда ключ вообще не существует и не будет работать для ключей, которые существуют с значениями ложности .

Как отметил билет, он не поддерживается .. до тех пор вам придется полагаться на пользовательское решение.

Несколько пользователей попросили об этом раньше или, по крайней мере, спросили, как это сделать на форумах WordPress.org, поэтому я написал функцию для выполнения задания, которое я никогда не держал (pastebinned), к счастью, я нашел оригинальную тему где я предоставил ссылку pastebin (которая не должна истекать).

http://pastebin.com/kgLt1RrG

Я написал это 8 месяцев назад, и я не тестировал его (с тех пор), поэтому дайте мне знать о любых проблемах.

Надеюсь, это поможет..

Простейший метод, хотя и не самый чистый:

 $args = array( 'post_type' => 'gallery', 'posts_per_page' => -1, 'meta_key' => 'gal-ID', 'order_by' => 'meta_value', 'order' => 'ASC', 'meta_key' => 'main-gal', ) ); 

Это даст вам все ваши галереи, отсортированные по мета-ключу. Следующим шагом будет выяснение, появляются ли галереи со значением 1 после или перед другими сообщениями. Таким образом, вы можете:

  • Обработайте элементы до тех пор, пока вы не обработаете ни четыре элемента галереи, ни достигнете сообщения с мета-значением 1
  • Пропускайте сообщения с метазначением 1, затем начните обработку, когда вы достигнете первого значения, отличного от 1

Другие методы, не требующие пользовательской инструкции SQL:

  • Выполняя запрос, чтобы найти галереи, которые вы не хотите, используя их для заполнения массива почтовых идентификаторов, затем выполните второй запрос, передав этот массив в качестве сообщений для исключения
  • Использование таксономии вместо пользовательских полей (решает это довольно красиво и предоставляет множество других приятных улучшений бесплатно, что также позволяет сэкономить ваше время)