Intereting Posts
Загрузка скриптов только на страницу редактирования сообщений Удалите wpautop из всех сообщений / страниц, кроме моего настраиваемого типа сообщения Javascript, который будет выполняться только на дочерних страницах определенного родителя Использование схемы с `the_excerpt` Внедрение глобального перенаправления (автоматическое перенаправление для всех страниц, у которых была изменена их пуля) Как использовать wp_query для поиска WordPress? Как отображать миниатюру, если сообщение назначено иначе, иначе Динамически добавлять подкатегории в любую категорию в меню Поток кода WordPress Установить идентификатор пользователя во время wp_create_user Изображения продукта Низкое качество после обновления с WP 3.5 до 4 Эффективное резервное копирование и восстановление нескольких сайтов Замена Open Source для WPML? Можно ли войти в систему с помощью user_email в WordPress? Мой пользовательский плагин имеет «новую версию», которая ссылается на несвязанный плагин

Как запустить WP_Query для извлечения вложений в сообщения только из определенной категории?

У меня есть блог WP с несколькими страницами и сообщениями и несколькими категориями. Я хочу написать цикл для получения изображений, прикрепленных к сообщениям (а не к страницам), и только те из определенной категории и их дети. Идентификатор категории равен 60.

Это вызов WP_Query:

$my_query = new WP_Query( array( 'post_type' => 'attachment', 'cat' => '60', 'post_mime_type' =>'image', 'posts_per_page' => $batch_size, 'nopaging' => false, 'post_status' => 'all', 'post_parent' => null, 'meta_key' => 'my_hash', 'orderby' => 'meta_value' ) ); 

Но я ничего не получаю!

Что я делаю не так?

Solutions Collecting From Web of "Как запустить WP_Query для извлечения вложений в сообщения только из определенной категории?"

Вам нужно будет сначала захватить сообщения, а затем захватить вложения, которые являются дочерними элементами указанных сообщений.

 $my_query = new WP_Query( array( 'meta_key' => 'my_hash', 'nopaging' => true, 'orderby' => 'meta_value', 'fields' => 'ids', 'cat' => '60', )); if ( $post_ids = $my_query->get_posts() ) { $post_ids = implode( ',', $post_ids ); $atts_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_parent IN($post_ids) AND post_type = 'attachment'" ); $my_query->query( array( 'posts_per_page' => $batch_size, 'post_mime_type' =>'image', 'post_status' => 'all', 'post_type' => 'attachment', 'post__in' => $atts_ids, )); } 

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

  • Найти идентификаторы сообщений типа post в категории (60?)
  • Найдите вложения, у которых есть post_parent который находится в списке, который мы нашли в нашем первом запросе

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

  global $wpdb; $id = 60; // your cat id $myrows = $wpdb->get_results( "SELECT p2.ID, p2.guid ". "FROM $wpdb->posts as p1, $wpdb->posts as p2, $wpdb->term_relationships as tr, $wpdb->term_taxonomy as tt ". "WHERE ". "((tr.term_taxonomy_id = $id AND ". "p1.ID = tr.object_id) OR ". "(tt.parent = $id AND ". "tr.term_taxonomy_id = tt.term_taxonomy_id AND ". "p1.ID = tr.object_id)) AND ". "p1.post_status = 'publish' AND ". "p2.post_parent = p1.ID AND ". "p2.post_mime_type LIKE 'image%'". "GROUP BY p2.ID". "<= 5". // you able to limit the db answer "", ARRAY_A ); print_r( $myrows );