Получение изображений, прикрепленных к записи

9 авг. 2012 г., 22:50:01
Просмотры: 18.6K
Голосов: 3

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

<?php
$image_query = new WP_Query(array('name'=>'slider-images'));
while ( $image_query->have_posts() ) : $image_query->the_post();
    $args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID ); 
    $attachments = get_posts($args);
    if ($attachments) {
        foreach ( $attachments as $attachment ) {
            echo '<li>';
            echo '<img src="'.wp_get_attachment_url($attachment->ID).'" />';
            echo '</li>';
        }
    }
endwhile;
wp_reset_postdata();
?>

Но ничего не отображается. Есть ли ошибка в моем коде или существует более простой/лучший способ группировки изображений, кроме как прикреплять их к записи?

РЕДАКТИРОВАНИЕ: Если я использую the_content() в цикле $image_query, изображения выводятся так:

<p>
    <a href="...">
        <img src="..." />
    </a>
</p>

Но мне нужно получить такой формат:

<li>
    <a href="...">
        <img src="..." />
    </a>
</li>
4
Комментарии

Что показывает исходный код для wp_get_attachment_url

Wyck Wyck
9 авг. 2012 г. 23:08:24

@Wyck исходный код не показывает теги li или img. Если я использую var_dump($attachments) - это массив с 0 элементами

Devin Crossman Devin Crossman
9 авг. 2012 г. 23:17:28

Вы действительно загрузили изображения для записи с ID 36?

Wyck Wyck
9 авг. 2012 г. 23:31:01

да, я сделал это. Я изменил запрос, чтобы использовать slug (ярлык) записи вместо ID. Я знаю, что запрос работает, потому что the_content() выводит изображения.

Devin Crossman Devin Crossman
10 авг. 2012 г. 03:57:42
Все ответы на вопрос 1
2

Лучше использовать get_children вместо get_posts. Вот краткий пример, который будет работать. Это функция, которую можно определить в вашем плагине или в файле functions.php, а затем использовать её как шаблонный тег.

    /**
     * Получает все изображения, прикрепленные к записи
     * @return string
     */
    function wpse_get_images() {
        global $post;
        $id = intval( $post->ID );
        $size = 'medium';
        $attachments = get_children( array(
                'post_parent' => $id,
                'post_status' => 'inherit',
                'post_type' => 'attachment',
                'post_mime_type' => 'image',
                'order' => 'ASC',
                'orderby' => 'menu_order'
            ) );
        if ( empty( $attachments ) )
                    return '';

        $output = "\n";
    /**
     * Цикл по каждому вложению
     */
    foreach ( $attachments as $id  => $attachment ) :

        $title = esc_html( $attachment->post_title, 1 );
        $img = wp_get_attachment_image_src( $id, $size );

        $output .= '<a class="selector thumb" href="' . esc_url( wp_get_attachment_url( $id ) ) . '" title="' . esc_attr( $title ) . '">';
        $output .= '<img class="aligncenter" src="' . esc_url( $img[0] ) . '" alt="' . esc_attr( $title ) . '" title="' . esc_attr( $title ) . '" />';
        $output .= '</a>';

    endforeach;

        return $output;
    }
9 авг. 2012 г. 23:01:43
Комментарии

нужно ли вызывать эту функцию в моем цикле $image_query? Я пробовал, но она просто выводит пустую строку

Devin Crossman Devin Crossman
9 авг. 2012 г. 23:13:25

Если выводится пустая строка, значит вложения не найдены. Эта функция предназначена для вызова внутри любого цикла, который возвращает $post.

Chris_O Chris_O
10 авг. 2012 г. 00:17:28