web-dev-qa-db-fra.com

Ayant des problèmes pour obtenir WP Post Gallery Images URL

Je dois obtenir l'URL (taille réelle) de toutes les images de la galerie associées à un message dans single.php. Le code suivant de Codex renvoie toutes les images en très petite taille 150x150 qui ne convient pas à ce que je veux.

<?php
     while ( have_posts() ) : the_post();
        if ( get_post_gallery() ) :
            $gallery = get_post_gallery( get_the_ID(), false );
           foreach( $gallery['src'] AS $src )
            {
                ?>

                <img src="<?php echo $src; ?>" class="my-custom-class" alt="Gallery image" />

                <?php
            }
        endif;
    endwhile;
?>

Ensuite, je trouve la méthode suivante qui rétablit les images en taille réelleMAISrenvoie toutes les images des galeries (pas uniquement les images de la galère de la publication en cours)

<?php
     global $post;
     $thumbnail_ID = get_post_thumbnail_id();
     $images = get_children( array('post_parent' => $post_id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
     print_r( $images );
     if ($images) :

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

         if ( $image->ID != $thumbnail_ID ) :

             $img_alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true); //alt
             if ($img_alt == '') : $img_alt = $image->post_title; endif;

             $big_array = image_downsize( $image->ID, 'large' );
             $img_url = $big_array[0];

             echo '<li>';
             echo '<img src="';
             echo $img_url;
             echo '" alt="';
             echo $img_alt;
             echo '" />';
             echo '</li><!--end slide-->';

     endif; endforeach; endif;

j'ai donc essayé de récupérer ceci en ajoutant $post_id = get_the_ID(); pour céder en tant que:

<?php
     global $post;
     $thumbnail_ID = get_post_thumbnail_id();
      $post_id = get_the_ID();
     $images = get_children( array('post_parent' => $post_id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
     print_r( $images );
     if ($images) :

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

         if ( $image->ID != $thumbnail_ID ) :

             $img_alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true); //alt
             if ($img_alt == '') : $img_alt = $image->post_title; endif;

             $big_array = image_downsize( $image->ID, 'large' );
             $img_url = $big_array[0];

             echo '<li>';
             echo '<img src="';
             echo $img_url;
             echo '" alt="';
             echo $img_alt;
             echo '" />';
             echo '</li><!--end slide-->';

     endif; endforeach; endif;

mais maintenant je reçois seulement une page blanche sans aucune sur la page! Pouvez-vous s'il vous plaît laissez-moi savoir pourquoi cela se produit et comment je peux résoudre ce problème? Thansk

3
Mona Coder

Comme je l'ai expliqué ailleurs, vous pouvez modifier les tailles d'image de get_post_gallery() ou get_post_gallery_images() à l'aide d'un simple filtre:

// Add a filter for full gallery size:
add_filter( 'shortcode_atts_gallery','wpse_full_size_gallery' );

$gallery = get_post_gallery( get_the_ID(), false );

 // Remove the filter:
remove_filter( 'shortcode_atts_gallery','wpse_full_size_gallery' );

où:

function wpse_full_size_gallery( $out )
{
    $out['size'] = 'full';  // Edit this to your needs! (thumbnail, medium, large, ...)
    return $out;
}

Cela vous évite d'exécuter d'autres appels wp_get_attachment_image_src pour récupérer les images en taille réelle à partir des identifiants de pièces jointes.

Votre premier exemple de code serait donc:

<?php
     while ( have_posts() ) : the_post();
        if ( get_post_gallery() ) :

           // Add a filter for full gallery size:
           add_filter( 'shortcode_atts_gallery','wpse_full_size_gallery' );

           $gallery = get_post_gallery( get_the_ID(), false );

           // Remove the filter:
           remove_filter( 'shortcode_atts_gallery','wpse_full_size_gallery' );

           foreach( $gallery['src'] AS $src )
           {
                ?>
                <img src="<?php echo $src; ?>" 
                     class="my-custom-class" 
                     alt="Gallery image" />
                <?php
           }
        endif;
    endwhile;
?>

pour afficher les images de la galerie en taille réelle.

Notez que la fonction get_children() récupère toutes les pièces jointes qui ont été téléchargées dans un post/posts donné. Donc, dans la plupart des cas, cela ne vous donnera pas le même résultat que les shortcodes de la galerie.

1
birgire