obține imagini atașate la postare

9 aug. 2012, 22:50:01
Vizualizări: 18.6K
Voturi: 3

Vreau să pot folosi imagini din biblioteca media într-un slider jQuery pe pagina principală, astfel încât să fie ușor pentru altcineva să actualizeze imaginile fără a fi nevoie de codare hardcodată. Am atașat mai multe poze la o postare și am încercat acest cod:

<?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 ); 
    $atasamente = get_posts($args);
    if ($atasamente) {
        foreach ( $atasamente as $atasament ) {
            echo '<li>';
            echo '<img src="'.wp_get_attachment_url($atasament->ID).'" alt="Imagine slider" title="Imagine slider" />';
            echo '</li>';
        }
    }
endwhile;
wp_reset_postdata();
?>

dar nu afișează nimic. Este ceva greșit în codul meu sau există o metodă mai ușoară/mai bună de a grupa imagini împreună decât să le pun într-o postare?

EDIT: Dacă folosesc the_content() în bucla mea $image_query, afișează imaginile astfel:

<p>
    <a href="...">
        <img src="..." alt="Imagine slider" title="Imagine slider" />
    </a>
</p>

dar am nevoie de ceva de genul:

<li>
    <a href="...">
        <img src="..." alt="Imagine slider" title="Imagine slider" />
    </a>
</li>
4
Comentarii

Ce arată codul sursă pentru wp_get_attachment_url

Wyck Wyck
9 aug. 2012 23:08:24

@Wyck codul sursă nu arată tag-urile li sau img. Dacă folosesc var_dump($attachments) este un array cu 0 elemente

Devin Crossman Devin Crossman
9 aug. 2012 23:17:28

Ai încărcat efectiv imagini la postarea cu id-ul 36?

Wyck Wyck
9 aug. 2012 23:31:01

da, am făcut-o. Am editat interogarea pentru a utiliza numele slug al articolului în loc. Știu că interogarea funcționează pentru că the_content() afișează imaginile.

Devin Crossman Devin Crossman
10 aug. 2012 03:57:42
Toate răspunsurile la întrebare 1
2

Este mai bine să folosești get_children decât get_posts. Iată un exemplu rapid care va funcționa. Acesta este sub forma unei funcții definite în plugin-ul tău sau în fișierul functions.php, apoi poți folosi funcția ca un template tag.

    /**
     * Obține toate imaginile atașate unui articol
     * @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";
    /**
     * Parcurge fiecare atașament
     */
    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 aug. 2012 23:01:43
Comentarii

apelez această funcție în bucla mea $image_query? Am încercat asta dar returnează doar un șir gol

Devin Crossman Devin Crossman
9 aug. 2012 23:13:25

Dacă returnează un șir gol înseamnă că nu s-au găsit atașamente. Funcția este concepută să fie apelată în orice buclă care returnează $post.

Chris_O Chris_O
10 aug. 2012 00:17:28