web-dev-qa-db-fra.com

utiliser wp_get_attachment_image () pour afficher les pièces jointes

J'espère vraiment que c'est un moment facepalm, b/c ça me frustre. Faire une boucle rapide pour montrer certaines images de pièce jointe. l'a soulevé presque directement du codex, mais wp_get_attachment_image () ne se comporte pas comme je l'imaginais.

l'ID de wp_get_attachment_image n'est-il pas l'ID de la pièce jointe? N'est-ce pas la même chose que l'ID de poste de la pièce jointe?

$args = array(
        'post_type' => 'attachment',
        'post_mime_type' => array('image','image/jpeg','image/png','image/gif'),
        'numberposts' => 5,
        'order' => 'ASC',
        'orderby' => 'post_title'
    );


$attachments = get_posts( $args );
     if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
           echo wp_get_attachment_image( $attachment->ID, 'full' , true);
           echo '<p>' . $attachment->post_title . '</p>';
          }
     }

imprime les titres des articles mais aucune image.

EDIT 1: oui je suis définitivement en train de recevoir des posts avec mes get_posts

un peu plus de débogage:

$attachments = get_posts( $args );
     if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
           $image= wp_get_attachment_image( $attachment->ID, 'thumbnail' , false, array( 'id' => $attachment->ID ));
           echo $image;
           print_r(wp_get_attachment_image_src( $attachment->ID, 'thumbnail' , false, array( 'id' => $attachment->ID )));
           echo var_export($image);
           echo '<p>' . $attachment->post_title . '</p>';
          }
     }
}

renvoie ceci:

Array ( [0] => http://localhost/multi/wp-content/uploads/2011/11/FabricColllFabrics-150x150.jpg [1] => 100 [2] => 100 [3] => 1 ) 
false
FabricColllFabrics

pour la première image ... donc wp_get_attachment_image_src trouve correctement la source, mais wp_get_attachment_image renvoie apparemment false?

edit 2: et il y a le visage que j'attendais

à un moment donné je dois avoir été en train de déboguer quelque chose et pour qui sait pourquoi je mets un

function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) {
  return false;

juste au début de wp_get_attachment_image

ce sont toutes des choses localeshost, et je n'ai généralement pas de base, mais je suppose qu'à un moment donné, j'y étais probablement en train d'essayer de revenir en arrière et d'avoir oublié de nettoyer après moi-même. échec épique.

1
helgatheviking

solution: le visage que j'attendais

à un moment donné je dois avoir été en train de déboguer quelque chose et pour qui sait pourquoi je mets un

function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) {
  return false;

juste au début de wp_get_attachment_image

ce sont toutes des choses localeshost, et je n'ai généralement pas de base, mais je suppose qu'à un moment donné, j'y étais probablement en train d'essayer de revenir en arrière et d'avoir oublié de nettoyer après moi-même. échec épique.

0
helgatheviking

Vous obtenez évidemment des données renvoyées pour $attachments = get_posts(); sinon, vous ne pourriez pas sortir $attachment->post_title. Donc, le problème doit être avec votre appel wp_get_attachment_image().

La première chose que je voudrais vérifier est: pourquoi définissez-vous le paramètre $icon sur true? Ce paramètre est destiné à générer une icône de type mime au lieu de l'image de pièce jointe réelle. Essayez de le définir sur false (ou en omettant complètement le paramètre, puisque false est la valeur par défaut).

En dehors de cela, c'est une longue tentative, mais essayez d'omettre full et laissez wp_get_attachment_image() tenter de sortir sa taille d'image par défaut, thumbnail.

2
Chip Bennett

Problème de débogage:

Si vous var_export() le résultat de $image = wp_get_attachment_image( $attachment->ID, 'full' , true); et que vous obtenez string(0), il saute simplement la question car l'image n'a pas été reçue.

Débogage plus profond:

Ajoutez simplement le 4ème argument en tant que tableau à wp_get_attachment_image(): array( 'id' => $attachment->ID ); Et ensuite, essayez ce qui suit dans votre fichier functions.php:

function debug_img_atts( $attr, $attachment )
{
    echo '<pre>';
    var_dump( $attr );
    var_dump( $attachment );
    echo '<pre>';
}
add_filter( 'wp_get_attachment_image_attributes', 'debug_img_atts', 20, 2 );

et voyez si votre identifiant est celui de vos pièces jointes.

Un autre problème pourrait être que la taille de votre image n'est pas enregistrée. La taille d'image par défaut est 'miniature'. Essayez de laisser le 3ème argument vide puis utilisez add_theme_support( 'post-thumbnails' ); dans votre functions.php et voyez si vous obtenez une sortie.

Vous pouvez également essayer d'utiliser var_dump( wp_get_attachment_image_src( $attachment->ID ) );

Une dernière solution serait tout simplement de laisser le paramètre post_mime_type et de vérifier le type MIME de la pièce jointe, avant de la replacer dans votre requête. Utilisez var_dump( get_post_mime_type( $attachment->ID ) ); pour l'inspecter

1
kaiser