Intereting Posts
Как использовать get_template_part вместо include_once? Как переопределить woocommerce.css? инициировать электронную почту, когда публикация публикуется кем-то, за которым следует пользователь Мне нужен файл .po для моего плагина? WP_Query-> имеет ограничение Оптимизация большого сайта WordPress Построение оператора if if с помощью is_category (); в archive.php Получение идентификаторов дочерних страниц, которые находятся в другом типе сообщения При использовании массива параметров API-интерфейс настроек не создает запись базы данных Как я могу переопределить функцию woocommerce wp_price в моей теме Добавить текст описания в поле ввода для новых полей профиля W3 Использовать кеширование браузеров, не работающих в google pagespeed Как ограничить автор комментария одним комментарием за сообщение Профиль пользователя Avatars Пользовательский цикл в странице Admin, приводящий к потере других полей

Как запустить 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 );