Вопрос или проблема
Я пытаюсь получить изображения как вложения из конкретного сообщения (пользовательский пост),
…и я использую пример из WordPress Codex примера codex для отображения всех изображений в виде списка
…но изображения в этом посте повторяются около 3 или 4 раз (всего у меня 7 изображений, прикрепленных к этому посту). Независимо от того, что я указываю для numberposts или post_per_page, я получаю повторяющиеся изображения, около 28, когда должно быть только семь.
Если я устанавливаю numberposts в 1 или post_per_image в 1, я получаю только 1 изображение из 7, прикрепленных к этому посту… что я делаю не так?
Код, который я использую, приведен ниже, а пример того, что происходит на моем сайте, здесь:
мой тестовый сайт, на котором я пытаюсь получить изображения из поста для использования в FlexSlider
Любая помощь очень ценится. _Синди
<ul class="slides">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
$args1 = array(
'post_type' => 'attachment',
'p = 107',
'numberposts' => 7,
'post_status' => 'inherit'
);
$attachments = get_posts( $args1 );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
echo '<li>';
echo wp_get_attachment_image( $attachment->ID, 'home-slider' );
echo '</li>';
}
}
endwhile; endif; ?>
</ul>
</div>
</div>
</div>
</div> <!-- конец контейнера 1080 пикселей -->
<div class="grid-gradient-bg"></div>
</div>
<!-- Навигация слайдера -->
<div id="home-hero-nav" role="">
<div class="container"> <!-- контейнер 1080 пикселей -->
<div class="full-width columns">
<ul class="slider-menu thumbnails clearfix">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
$args2 = array(
'post_type' => 'attachment',
'p = 107',
'numberposts' => 0,
'post_status' => 'inherit'
);
$attachments = get_posts( $args2 );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
echo '<li>';
echo wp_get_attachment_image( $attachment->ID, 'home-slider-thumb' );
echo '</li>';
}
}
endwhile; endif; ?>
</ul>
Ваш второй аргумент “p = 107” недействителен.
Вы можете попробовать функцию get_attached_media().
И сделать что-то вроде этого:
$media = get_attached_media('image', 2360);
foreach ($media as $m) {
echo '<li>';
echo wp_get_attachment_image( $m->ID, 'home-slider' );
echo '</li>';
}
Вот исправление – убрав цикл foreach из цикла while. Я также установил attachments как get_children.
Надеюсь, это поможет кому-то! Также посмотрите этот отличный пост на premiumdw!!
<?php
$attachments = get_children(array('post_parent' => [id сообщения], 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => 'inherit', 'posts_per_page' => [количество изображений, прикрепленных к вашему посту] ));
if ($attachments) { // если есть изображения, прикрепленные к посту, начинаем разметку flexslider
foreach ( $attachments as $attachment_id => $attachment ) { // создаем элементы списка изображений с подписями
echo '<li>';
echo wp_get_attachment_image($attachment_id, '[строка или другой массив для ширины и высоты]');
echo '</li>';
}
} // конец проверки изображений
wp_reset_postdata();
?>
_Синди
Ответ или решение
Чтобы корректно извлечь изображения, прикрепленные к определенному посту в WordPress и использовать их в слайдере, вы должны убедиться, что ваш код правильно настроен и использует правильные функции. Ваша текущая проблема, связанная с повторением изображений, может быть вызвана тем, что вы используете неправильные параметры в запросе.
Вот как можно сделать это правильно:
-
Используйте функцию
get_children()
для извлечения вложений. Эта функция подходит для извлечения всех вложений (изображений) конкретного поста. -
Убедитесь, что нет вложенных циклов. Избегайте повторного запроса к постам внутри цикла
have_posts()
.
Ниже приведен исправленный код, который решает вашу проблему:
<ul class="slides">
<?php
// Замените [post id] на фактический ID вашего поста
$attachments = get_children(array(
'post_parent' => [post id], // ID вашего поста
'post_type' => 'attachment',
'post_mime_type' => 'image', // Фильтруем только изображения
'post_status' => 'inherit',
'posts_per_page' => -1 // Извлекаем все изображения
));
if ($attachments) {
foreach ($attachments as $attachment_id => $attachment) {
echo '<li>';
echo wp_get_attachment_image($attachment_id, 'home-slider'); // Замените 'home-slider' на нужный вам размер изображения
echo '</li>';
}
}
?>
</ul>
- Слайдер навигация. Если вы хотите включить такие же изображения в навигацию слайдера, используйте аналогичный код:
<ul class="slider-menu thumbnails clearfix">
<?php
// Замените [post id] на фактический ID вашего поста
$attachments = get_children(array(
'post_parent' => [post id],
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'posts_per_page' => -1
));
if ($attachments) {
foreach ($attachments as $attachment_id => $attachment) {
echo '<li>';
echo wp_get_attachment_image($attachment_id, 'home-slider-thumb'); // Замените 'home-slider-thumb' на нужный вам размер изображения
echo '</li>';
}
}
?>
</ul>
- Обратите внимание на параметры запроса. Используйте
'posts_per_page' => -1
, чтобы получить все изображения, связанные с постом. Убедитесь, что вы правильно указываетеpost_parent
— ID поста, к которому прикреплены изображения.
Таким образом, исправив использование функции и структуру цикла, вы сможете успешно извлечь и отобразить все изображения, прикрепленные к вашему посту, без повторений.