Как получить изображения из поста для использования в слайдере

Вопрос или проблема

Я пытаюсь получить изображения как вложения из конкретного сообщения (пользовательский пост),

…и я использую пример из 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 и использовать их в слайдере, вы должны убедиться, что ваш код правильно настроен и использует правильные функции. Ваша текущая проблема, связанная с повторением изображений, может быть вызвана тем, что вы используете неправильные параметры в запросе.

Вот как можно сделать это правильно:

  1. Используйте функцию get_children() для извлечения вложений. Эта функция подходит для извлечения всех вложений (изображений) конкретного поста.

  2. Убедитесь, что нет вложенных циклов. Избегайте повторного запроса к постам внутри цикла 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>
  1. Слайдер навигация. Если вы хотите включить такие же изображения в навигацию слайдера, используйте аналогичный код:
<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>
  1. Обратите внимание на параметры запроса. Используйте 'posts_per_page' => -1, чтобы получить все изображения, связанные с постом. Убедитесь, что вы правильно указываете post_parent — ID поста, к которому прикреплены изображения.

Таким образом, исправив использование функции и структуру цикла, вы сможете успешно извлечь и отобразить все изображения, прикрепленные к вашему посту, без повторений.

Оцените материал
Добавить комментарий

Капча загружается...