Intereting Posts
Почему инструменты Google для веб-мастеров говорят мне обновлять WordPress Возможно ли иметь одну страницу с несколькими элементами или 2 блогов на сайте? ограничить подписчиков административной областью. У них собственный профиль на fron-end Теги Вместо категории Использование PHP-почты; получение предупреждения заголовка Как удалить устаревшие изображения с неправильным размером в _wp_attachment_metadata? админ сайта для подписчиков Страница архива Sensei, как заставить WordPress показывать содержимое на основе шаблонов архива Как я могу сделать объект доступным через весь сайт? Удалить меню администратора для пользовательской таксономии, прикрепленной к настраиваемому типу сообщения Добавить метатекст шаблона на страницу редактирования категории? Выражение SELECT неверно? WordPress, добавляющий элемент в меню, удаляет почтовые метаданные Переопределение WoCommerce на странице js в моей теме Проверка является родителем категории или нет из ее идентификатора

Архив таксономии + вложения запросов = дублирующиеся результаты

Я пытаюсь получить вложения определенного термина (на его странице архива). Но результаты показывают результирующие изображения в 5 раз вместо одного.

У меня есть несколько циклов на этой странице – один для отображения связанных сообщений, другой – для отображения связанных продуктов (пользовательский пост), а другой – для отображения связанных изображений. Пользовательские сообщения и сообщения работают хорошо, но я не могу показать вложения правильно. : S

<?php $queried_object = get_queried_object(); $term_id = $queried_object->term_id; $args = array( 'post_status' => 'inherit', 'numberposts' => 0, 'post__not_in' => array_merge($do_not_duplicate,get_option( 'sticky_posts' )), 'post_type' => 'attachment', ); $args['tax_query'] = array( array( 'taxonomy' => 't-arte', 'terms' => $term_id, 'field' => 'id', ), ); ?> <?php $t = $data['t-arte']; $array = explode(" ", $t); $array = array_unique($array);?> <?php $media_query = array_unique($array); ?> <?php $media_query = get_posts($args); if( !empty( $media_query ) ) : foreach ($media_query as $media_query) : global $post; $post = $media_query; setup_postdata($media_query); ?> <div id="archivespage-media-item"> <?php $attachments = get_posts( $args ); if ( $attachments ) { foreach ( $attachments as $attachment ) { echo '<div id="imagem">'; the_attachment_link( $attachment->ID, true ); echo '</div>'; } }?> </div> <?php endforeach;else :?> <p>Ainda não temos nenhuma imagem relacionada :(</p> </div> <?php endif; ?> <?php wp_reset_query();?> 

Я думаю, проблема заключается в том, что вы передаете неправильные аргументы в запрос $attachments , в результате чего вы не должны получать запланированные сообщения в запросе $attachments .

Вот что вы делаете:

 $args = array( 'post_status' => 'inherit', 'numberposts' => 0, 'post__not_in' => array_merge($do_not_duplicate,get_option( 'sticky_posts' )), 'post_type' => 'attachment', ); $args['tax_query'] = array( array( 'taxonomy' => 't-arte', 'terms' => $term_id, 'field' => 'id', ), ); $attachments = get_posts( $args ); 

Таким образом, вы запрашиваете все сообщения, которые являются attachment пост-типа, а не только сообщения, которые прикреплены к текущему сообщению, зацикливаются в $media_query .

Вот как вы перебираете $media_query :

 foreach ($media_query as $media_query) : 

(Примечание: плохая форма. Попробуйте что-то вроде foreach ( $media_query as $media ) : вместо этого.)

Вам необходимо передать идентификатор текущего сообщения в запрос $attachments , как post_parent . Что-то простое может быть:

 $attachments = get_posts( array( 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_parent' => $media_query->ID 'numberposts' => 0 ) ); 

Я понял! Результат отобразит все вложения в определенном терминах на странице архива терминов. Спасибо Чип!

 <?php $queried_object = get_queried_object(); $term_id = $queried_object->term_id; global $wp_query; $original_query['tax_query'] = array( array( 'taxonomy' => 't-arte', 'terms' => $term_id, 'field' => 'id', ),); $original_query = (array) $wp_query; $attach_query = array( 'post_type'=> array( 'attachment' ), 'post_status' => array( null )); $args = array_merge($original_query['query_vars'], $attach_query); $media_query = new WP_Query( $args )?> <?php if($media_query->have_posts()) : while ($media_query->have_posts() ) : $media_query->the_post(); if( $post->ID == $do_not_duplicate ) continue; ?> <div id="archivespage-media-item"> <div id="imagem"> <?php echo wp_get_attachment_link($attachment->ID, 'bigger-thumb');?> </div> </div> <?php endwhile; else: ?> //do stuff </div>