Intereting Posts
Как создать альтернативную домашнюю страницу? По каким причинам безопасности svgs заблокирован в медиа-загрузчике? Создайте новую страницу в теме WordPress Страницы и сообщения с Rel Канонические вопросы по всему сайту Заказывать сообщения с помощью настраиваемого массива posts_per_page без ограничений стиль виджета заднего виджета и возможность включения нескольких виджета Какой контент должен идти в index.php? Восстановить исходную панель администратора WP после установки BuddyPress Дополнительное поле заголовка для комментариев Добавление описания в элементы управления настройками темы Как исключить / удалить подменю с помощью Walker_Nav_Menu Содержимое не отображается при использовании настраиваемого шаблона + боковой панели Можно использовать wordpress в качестве платформы публикации, но программно вставлять контент? Удаление плагина: удалить все параметры с определенным префиксом

Tricky WP Query

Я пытаюсь использовать wp_query (или другой собственный класс запросов WordPress), чтобы сделать следующее:

получить все сообщения WHERE (post_type = 'post' AND category = 7) OR (post_type = 'case-studies' И meta_key = 'homeslide' И meta_value = 1)

Я не уверен, что любой из них сможет справиться с этим.

Попытка с помощью WP Query:

$args = array ( 'relation' => 'OR', array( 'meta_key' => '_homeslide', 'meta_value' => '1' ), array( 'category' => '7' ) ); 

Но я думаю, что «отношение» предназначено только для использования с tax_query.

Я мог бы, вероятно, использовать $ wpdb для создания расширенного запроса, но хотел бы посмотреть, можно ли это сделать с другими и посмотреть, не хватает ли я чего-то очевидного.

Solutions Collecting From Web of "Tricky WP Query"

Для такого сложного запроса я бы рекомендовал запустить два запроса и затем слить результаты.

Сначала создайте массив для:

получить все сообщения WHERE (post_type = 'post' AND category = 7)

Затем получите массив для:

(post_type = 'case-studies' И meta_key = 'homeslide' И meta_value = 1)

Затем используйте array_merge() чтобы объединить массивы, и у вас есть коллекция, которая удовлетворяет вашим требованиям. Да, вы делаете запросы … но это кажется довольно быстрым / легким краткосрочным решением.

Хорошо, я собрал решение, используя get_posts & query_posts, чтобы возвращать массивы для каждого: сообщений и тематических исследований. Затем array_merged их (спасибо за головы EAMann), а затем с помощью uasort () с пользовательской функцией сравнения, чтобы отсортировать их по post_date.

Это не самое привлекательное решение, но поскольку оно работает, и я возвращаю максимум 5 сообщений из каждого запроса, это будет сделано.

 // Collect posts $news = get_posts(); $cs = query_posts( array( 'post_type' => 'case-studies', 'meta_key' => '_homeslide', 'meta_value' => 'true' )); // Merge the two arrays $vslides = array_merge($news, $cs); // Function to compare array elements using post_date function compare($x, $y) { if ( strtotime($x->post_date) == strtotime($y->post_date) ) return 0; else if ( strtotime($x->post_date) > strtotime($y->post_date) ) return -1; else return 1; } // Sort by post_date uasort($vslides, 'compare');