web-dev-qa-db-fra.com

Problème: wp_query affiche toutes les images sur le site.

J'ai des problèmes avec une requête. Je souhaite obtenir les images attachées à un message individuel du type location .

Ma requête est interrompue car toutes les images du site entier sont générées:

$image_query = new WP_Query( 
    array( 
        'post_type' => 'attachment', 
        'post_status' => 'inherit', 
        'post_mime_type' => 'image', 
        'posts_per_page' => -1, 
        'post_parent' => $rental->post->ID,
        'order' => 'DESC' 
    ) 
);

if( $image_query->have_posts() ){
 while( $image_query->have_posts() ) {
     $image_query->the_post();
     $imgurl = wp_get_attachment_url( get_the_ID() );
     echo '<div class="item">';
     echo '<img src="'.$imgurl.'">';
     echo '</div>';
 }

 wp_reset_postdata();

}

Des idées sur la façon dont je peux ajuster cela pour obtenir uniquement les images jointes au message actuel?

1
warm__tape

Votre problème est le paramètre post_parent; s'il est défini sur 0 ou une valeur falsey telle que null, votre requête renverra tous les messages de niveau supérieur.

Il suffit donc de s’assurer que $ rental-> post-> ID a une valeur ou d’utiliser une approche différente, telle que la fonction get_the_ID().

Je ne peux pas vraiment vous en dire plus, car vous n'avez pas inclus la partie où vous avez défini $rental

$image_query = new WP_Query( 
    array(
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'posts_per_page' => -1,
        'post_parent' => get_the_ID(), // your issue here lays
    )
);

Et consultez la documentation pour plus de détails: https://developer.wordpress.org/reference/classes/wp_query/#post-page-parameters

0
ngearing

Oui, ça a aidé. J'ai remarqué que la fonction fonctionnait parfaitement sur un poste standard. En gros, j'ai fini par déplacer la fonction dans functions.php:

function get_rental_carousel_images($rental_id) {

// loosely based on http://martyspellerberg.com/2011/11/outputting-the-wordpress-attachments-gallery/

global $rental;

$images = get_children( array(
    'post_parent' => $rental_id,
    'post_status' => 'inherit',
    'post_type' => 'attachment',
    'post_mime_type' => 'image',
    'order' => 'ASC',
    'orderby' => 'menu_order ID'
) );

if ($images) :

    foreach ($images as $attachment_id => $image) :

        $img_url = wp_get_attachment_url( $image->ID );

        ?>

        <img src="<?php echo $img_url; ?>" />

    <?php endforeach; ?>

<?php endif;

puis la sortie des images dans mon modèle comme ceci:

<?php get_rental_carousel_images( get_the_ID() ); ?>

0
warm__tape