cassé? WP_Query et «pièce jointe» en tant que type de publication

14

J'ai une galerie attachée à une page. Sur cette page, j'exécute la requête suivante:

$events_gallery = new WP_Query( // Start a new query for our videos
array(
    'post_parent' => $post->ID, // Get data from the current post
    'post_type' => 'attachment', // Only bring back attachments
    'post_mime_type' => 'image', // Only bring back attachments that are images
    'posts_per_page' => '3', // Show us the first three results
    'status' => 'inherit', // Inherit the status of the parent post 
    'orderby' => 'rand', // Order the attachments randomly  
    )
);

J'ai expérimenté pas mal de façons et, pour une raison quelconque, je ne parviens pas à obtenir des pièces jointes. Est-ce que je manque quelque chose d'évident ici?

Mettre à jour *

Merci à Wok de m'avoir orienté dans la bonne direction.

Il s’avère que j’utilisais "status" au lieu de "post_status". Le codex avait utilisé "status" comme exemple dans son explication en contexte du type de message "pièce jointe". J'ai mis à jour le codex pour faire référence à "post_status" à la place. Le code correct est le suivant:

$events_gallery = new WP_Query( // Start a new query for our videos
array(
    'post_parent' => $post->ID, // Get data from the current post
    'post_type' => 'attachment', // Only bring back attachments
    'post_mime_type' => 'image', // Only bring back attachments that are images
    'posts_per_page' => '3', // Show us the first result
    'post_status' => 'inherit', // Attachments default to "inherit", rather than published. Use "inherit" or "all". 
    'orderby' => 'rand', // Order the attachments randomly  
    )
);  
    
posée Jonathan Wold 20.04.2011 - 00:37

4 réponses

13

Ce sont les paramètres de requête que j'utilise ... fonctionne pour moi lorsque je parcours les résultats

array(
                'post_parent' => $post->ID,
                'post_status' => 'inherit',
                'post_type'=> 'attachment',
                'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png'                  
            );
    
réponse donnée Wok 20.04.2011 - 02:57
10

Ajoutez dans $args , c’est important.

'post_status' => 'any'

Ne pas: 'post_status' => null

Cela est important car les pièces jointes n'ont pas post_status . Par conséquent, la valeur par défaut de post_status , published , ne trouvera aucune pièce jointe.

    
réponse donnée Pham 19.09.2013 - 06:10
0

En regardant la requête générée, cela semble être un bogue. 'status' = > 'inherit' est interprété comme le statut du parent lorsque l'entrée dans la base de données pour la pièce jointe est littéralement 'inherit'.

Une alternative consiste à utiliser get_children à la place de WP_Query.

    
réponse donnée Milo 20.04.2011 - 01:13
0

J'ai pu afficher toutes les images qui sont des pièces jointes à un message en utilisant ce code.

<?php
$args = array( 'post_type' => 'attachment', 'orderby' => 'menu_order', 'order' => 'ASC', 'post_mime_type' => 'image' ,'post_status' => null, 'post_parent' => $post->ID );
$attachments = get_posts($args);
    if ($attachments) {
    foreach ( $attachments as $attachment ) { ?>
      <img src="<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>" />
<?php   }
    } ?>

Et pour refléter l'URL de l'image originale en taille réelle, vous pouvez associer cette image à

.
<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>

J'espère que c'est une approche de ce que vous essayez de faire.

    
réponse donnée Chad Von Lind 20.04.2011 - 02:16

Lire d'autres questions sur les étiquettes