Intereting Posts
Производительность wp_get_attachment_image_srcset () и wp_get_attachment_image_url () Как поместить сообщение на страницы и наоборот? Шаблон для индивидуальных почтовых дизайнов Не удалось найти каталог содержимого WordPress (wp-content) Получение URL-адреса изображения нестандартного размера get_post_meta с переменной Зациклируйте сообщения пост-типа (события) и создайте файл .ics (iCal)? $ _POST пуст в использовании нового файла php, добавленного в тему Загрузите front-page.php из подпапки Есть ли разница между ниже фрагментами кода WP_Query? Шаблоны страниц не работают, несмотря на правильность ссылок Разбивка страниц выполняется везде, но указательная страница Ошибка при размещении заказа. Оформление продукта недоступно в запрошенном количестве (0) Как сделать кнопку поиска, которая будет искать мой сайт? Добавление окна вспомогательного редактора на страницу «Отправить»

Список самых последних загрузок изображений, но только для определенного пользовательского типа сообщений

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

$attachments = get_posts( array( 'post_type' => 'attachment', 'posts_per_page' => $number, 'post_mime_type' => 'image' ) ); 

Это возвращает все недавно загруженные изображения, независимо от того, прикреплены ли они к сообщению или странице или не подключен через меню «Мультимедиа».

Я хотел бы ограничить этот список только изображениями, прикрепленными к настраиваемому типу сообщений, который я создал. (Тип персонализированного сообщения не так важен: один и тот же вопрос может быть: «только изображения прикреплены к сообщениям» или «только изображения, прикрепленные к страницам»).

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

Вы пытались добавить фильтр в get_posts. Это не проверено, просто мысль после небольшого поиска:

  function my_filter( $query ) { if( is_home() ) //Example, if u want to display recent images on home { $query->set( 'post_type', array( 'attachment', 'my_cpt' ) ); } } add_filter( 'pre_get_posts', 'my_filter' ); 

EDIT: После перечитывания я не думаю, что он выполняет то, что вы пытаетесь сделать, я думаю, что он отобразит как вложения, так и сообщения вашего CPT.

Думаю, я оставлю его здесь, если он даст вам какие-то идеи.

РЕДАКТИРОВАТЬ 2: Единственный другой способ, помимо фильтрации в PHP, который, как я могу думать, будет представлять собой пользовательский sql-запрос, а затем настроить данные для публикации. EX:

 $sql = "SELECT * FROM wp_posts WHERE post_type = 'attachment' AND post_parent IN (SELECT ID FROM wp_posts WHERE post_type = 'your-cpt') //ORDER BY"; $posts = $wpdb->get_results( $sql, OBJECT ); //loop - setup_postdata 

Дополнительная информация: WordPress Codex

Сначала вы получаете недавно измененные сообщения только для своего CPT. Затем получите их приложения. Конечно, у вас может быть некоторая логика для ограничения массива вложений.

 $mycpt = get_posts(array( 'post_type'=>'mycpt', 'posts_per_page'=>-1, 'orderby'=>'modified' )); $attachments = array(); foreach($mycpt as $mycpt) { $post_attachements = get_posts( array( 'post_parent' => $mycpt->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'posts_per_page' => -1 ) ); foreach($post_attachements as $post_attachements){ $attachments[] = $post_attachements; } } 

поместите этот код в цикле в отдельный пользовательский тип сообщения

 $attachments = get_posts( array( 'post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'DESC', 'posts_per_page' => -1 ) ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $attID = $attachment->ID; echo '<a href="'.wp_get_attachment_url( $attID ).'" alt="'.apply_filters( 'the_title', $attachment->post_title ).'" class="att-item">'.wp_get_attachment_image( $attID, 'thumbnail' ).'</a>'; } }