Intereting Posts
Как удалить «Информация об изображении» и «Опубликовать дату / автора» со страницы мультимедиа? Объединение нескольких каналов RSS с использованием fetch_feed Как добавить второе меню «Сообщений» в свою панель? Ручные отрывки для страниц, не работающих в поиске Поделитесь плагинами, темами и несколькими сообщениями в многодоменной сети Как удалить повторяющийся запрос на загрузку страницы или сделать их доступными для кэширования Добавление / удаление элементов управления динамически на основе других параметров в Настройке Удалить категорию slug из ссылки Возможность создания CSS-сайта на нескольких сайтах Почему нельзя сбалансировать нагрузку /wp-login.php? Как отображать изображения в связанных сообщениях? Обновить значение константы Как удалить index.php в URL? Multisite застрял на 1 МБ для максимального размера файла Почему 404 не запускают мой шаблон 404.php?

Возвращать вложения из пользовательского типа сообщения

Я довольно новый разработчик WP. Я пытаюсь получить my portfolio.php чтобы отобразить все изображения, прикрепленные к моему портфолио типа персонализированного типа, а затем отобразить их в формате каменной кладки. Мне удалось показать их без запроса $post->post_type , но не так много успеха при попытке ограничить WP получением изображений, прикрепленных к моему настраиваемому типу сообщений. Любая помощь будет высоко оценена, и спасибо заранее!

  <?php get_header(); ?> <div id="portfolio-wrapper"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if ( $post->post_type == 'portfolio' ) { $attachments = get_posts( array ( 'post_type' => 'attachment', 'numberposts' => -1, 'post_parent' => $post->ID ) ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $imgurl = wp_get_attachment_url ($attachment->ID); echo '<div class="portfolio-item">'; echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>'; echo '</div>'; } } } ?> </div> <?php endwhile; endif; ?> <?php get_footer(); ?> 

По просьбе, мое решение. Не очень элегантный, но он работает:

  $query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page' => -1 ) ); if( $query->have_posts() ){ while($query->have_posts()){ $query->the_post(); $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_parent' => get_the_ID(), 'order' => 'DESC' ) ); while( $image_query->have_posts() ) { $image_query->the_post(); $imgurl = wp_get_attachment_url( get_the_ID() ); echo '<div class="portfolio-item">'; echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>'; echo '</div>'; } } в  $query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page' => -1 ) ); if( $query->have_posts() ){ while($query->have_posts()){ $query->the_post(); $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_parent' => get_the_ID(), 'order' => 'DESC' ) ); while( $image_query->have_posts() ) { $image_query->the_post(); $imgurl = wp_get_attachment_url( get_the_ID() ); echo '<div class="portfolio-item">'; echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>'; echo '</div>'; } } 

}

Solutions Collecting From Web of "Возвращать вложения из пользовательского типа сообщения"

Ваше решение (неправильно отредактированное в вопросе) должно быть работоспособным, но вы должны иметь возможность выполнить то же самое с меньшим количеством запросов.

  1. Потяните свой ID портфеля s – обратите внимание на аргумент fields .
  2. Затем потяните ваши вложения с этими ID в качестве родительского сообщения.
  3. Затем вы перебираете только один массив изображений.

Это работает с двумя основными запросами. Для остроумия:

 $query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page' => -1, 'fields' => 'ids' ) ); $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_parent__in' => $query->posts, 'order' => 'DESC' ) ); if( $image_query->have_posts() ){ while( $image_query->have_posts() ) { $image_query->the_post(); $imgurl = wp_get_attachment_url( get_the_ID() ); echo '<div class="portfolio-item">'; echo '<a href="'.$imgurl.'" rel="lightbox[portfolio-home]"><img class="portfolio" src="'.$imgurl.'"></a>'; echo '</div>'; } } 

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