obtener imágenes adjuntas a una publicación

9 ago 2012, 22:50:01
Vistas: 18.6K
Votos: 3

Quiero tener la capacidad de usar imágenes de la biblioteca multimedia en un slider jQuery en la página de inicio para que sea fácil para otra persona actualizar las imágenes sin tener que codificarlas manualmente. He adjuntado varias fotos a una publicación e intenté esto:

<?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();
?>

pero no muestra nada. ¿Hay algo mal en mi código o existe una forma más fácil/mejor de agrupar imágenes juntas en lugar de ponerlas en una publicación?

EDITO: Si uso the_content() en mi bucle $image_query, muestra las imágenes como:

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

pero lo que necesito es algo como:

<li>
    <a href="...">
        <img src="..." />
    </a>
</li>
4
Comentarios

¿Qué muestra el código fuente para wp_get_attachment_url

Wyck Wyck
9 ago 2012 23:08:24

@Wyck el código fuente no muestra las etiquetas li o img. Si hago var_dump($attachments) es un array con 0 elementos

Devin Crossman Devin Crossman
9 ago 2012 23:17:28

¿Realmente subiste imágenes a la publicación con ID 36?

Wyck Wyck
9 ago 2012 23:31:01

sí lo hice. He editado la consulta para usar el nombre del slug de la publicación en su lugar. Sé que la consulta funciona porque the_content() muestra las imágenes.

Devin Crossman Devin Crossman
10 ago 2012 03:57:42
Todas las respuestas a la pregunta 1
2

Es mejor usar get_children en lugar de get_posts. Aquí hay un ejemplo rápido que funcionará. Esto está en forma de una función que se define en tu plugin o en functions.php y luego se usa la función como una etiqueta de plantilla.

    /**
     * Obtiene todas las imágenes adjuntas a una entrada
     * @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";
    /**
     * Recorre cada adjunto
     */
    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 ago 2012 23:01:43
Comentarios

¿Llamo a esta función en mi bucle $image_query? Lo intenté pero solo devuelve una cadena vacía

Devin Crossman Devin Crossman
9 ago 2012 23:13:25

Si devuelve una cadena vacía significa que no se encontraron adjuntos. Está diseñada para ser llamada dentro de cualquier bucle que esté devolviendo el $post.

Chris_O Chris_O
10 ago 2012 00:17:28