Comment obtenir des images de galerie?

4

J'ai des images téléchargées dans des publications wordpress (par exemple, la publication n ° 1 et la publication n ° 2). Maintenant, j'ai créé un nouveau message (par exemple, le message n ° 3) et dans ce message, j'ai inséré la galerie WordPress 3.5, je n'ai téléchargé aucune image dans le message n ° 3, mais j'ai utilisé les images du message n ° 1. et post # 2. Maintenant, dans le post # 3, je voudrais obtenir les liens vers les images, mais je n'arrive pas à obtenir. J'utilise le code suivant:

$attachments = get_children( array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'medium' );
   }

Cela ne montrera que l'image si je poste dans l'article, mais pas si j'ajoute à partir d'autres articles. Alors, comment puis-je obtenir les liens vers les images ajoutées dans la galerie mais non téléchargées?

Merci pour toute aide.

    
posée jay 17.12.2012 - 12:31

3 réponses

5

J'ai eu le même problème. Comment puis-je afficher toutes les images d'un message contenant une galerie dont certaines images ne sont pas attachées au message ou sont associées à des messages différents?

La nouvelle interface multimédia de WP3.5 vous permet d’ajouter des images de la médiathèque à une galerie, qu’elles soient "attachées" ou non. Comme vous l'avez découvert, la fonction "get_children" ne renvoie que les images jointes au message. Le truc que j’ai utilisé est d’obtenir les identifiants du shortcode [gallery] lui-même plutôt que du fait qu’ils sont des pièces jointes. Le shortcode inclut tous les identifiants d’image, qu’ils soient ou non attachés à la publication. Par exemple. [gallery ids="410,411,412,413,414,415"]. De toute évidence, wordpress peut analyser cela pour récupérer toutes les images et les afficher au format galerie en utilisant la fonction "gallery_shortcode" incluse dans le noyau de wordpress (dans includes / media.php). Pour obtenir les identifiants de toutes les images du code court [gallery], j'ai créé une nouvelle fonction dans mon fichier functions.php:

function grab_ids_from_gallery() {

global $post;
$attachment_ids = array();
$pattern = get_shortcode_regex();
$ids = array();

if (preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) ) {   //finds the     "gallery" shortcode and puts the image ids in an associative array at $matches[3]
$count=count($matches[3]);      //in case there is more than one gallery in the post.
for ($i = 0; $i < $count; $i++){
    $atts = shortcode_parse_atts( $matches[3][$i] );
    if ( isset( $atts['ids'] ) ){
    $attachment_ids = explode( ',', $atts['ids'] );
    $ids = array_merge($ids, $attachment_ids);
    }
}
}
  return $ids;

 }
add_action( 'wp', 'grab_ids_from_gallery' );

Utilisez maintenant la fonction "grab_ids_from_gallery ()" pour renvoyer tous les identifiants sous forme de tableau dans votre modèle.

Je suis sûr qu’il existe un moyen plus élégant de procéder. Mais cela fonctionne pour moi. La base de ce code provient de:

enlace

qui aborde ce problème.

    
réponse donnée steveO 31.12.2012 - 02:26
0

Je dois admettre que je n'ai pas eu le temps de jouer avec les nouveaux médiathèques de 3.5, mais de travailler avec le code seul, sans tenir compte des fonctionnalités de WP Gallery ...

Le code que vous avez fourni utilise get_children() avec la variable de requête post_parent définie sur get_the_ID() (l'ID de l'objet publication en cours de traitement dans la boucle de contenu). En tant que tel, l’appel de get_children() permet uniquement d’interroger les pièces jointes de la publication actuelle, et aucune autre .

Dans la terminologie de votre exemple, votre code, lorsqu'il est exécuté dans le contexte de la boucle lors du traitement de Post # 3 , ne peut pas extraire les pièces jointes attachées à Post # 1 . et Post # 2 car il demande spécifiquement les pièces jointes attachées à Post # 3 .

Malheureusement, Wordpress ne ne prend pas en charge le passage de plusieurs valeurs dans la variable post_parent query, aussi, pour pouvoir récupérer les pièces jointes des autres publications de la manière souhaitée, vous devrez identifiants de publication des publications contenant des pièces jointes ( publication n ° 1 et publication n ° 2 ) et exécuter un appel à get_children() pour chaque substitution, en remplaçant la valeur post_parent de " get_the_ID() "avec l'ID correspondant.

Une solution plus efficace (bien que théoriquement plus complexe) pourrait être possible en exploitant astucieusement l'objet WP_Query . croyez que la solution que vous recherchez (ou que je suppose que vous recherchez - vous n’avez jamais posé de question;)) donnerait quelque chose dans le sens de

$attachmentParentIds = getAttachmentParentIds( get_the_ID() );
foreach( $attachmentParentIds as $attParentId ) {
    $attachments = get_children( array('post_parent' => $attParentId, 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
        echo wp_get_attachment_image( $attachment_id, 'medium' );
    }
}

qui utilise une fonction comme

//Returns an array of post IDs containing attachments that should be displayed
//on the post indicated by the passed post ID.
function getAttachmentParentIds( $intPostId ) {
    $ids = array();

    //Figure out which posts contain attachments that need to be displayed for $intPostID

    //...

    return $ids; //return an array of IDs
}

en tant qu'espace réservé pour la logique qui détermine les publications qui contiennent des pièces jointes devant être affichées pour l'ID de publication passée. Je ne suis pas optimiste quant à l’ampleur de votre mise en œuvre ni à votre application, et en tant que tel, je ne sais pas ce que les détails de cette logique pourraient impliquer pour votre projet.

    
réponse donnée bosco 29.12.2012 - 01:05
0

La vraie solution serait la création d'une nouvelle "galerie" d'objets "réels" avec son propre identifiant.

Une galerie n'est rien d'autre qu'un tableau d'identifiants d'images, mais sa gestion serait plus simple:

  • Vous pouvez le créer directement à partir du gestionnaire de médias, à la manière dont vous créez les nouvelles "galeries" maintenant dans WP 3.5.x Au lieu de générer un shortcode comme ceci: [gallery ids="xx, yy, zz"], il pourrait simplement créer une nouvelle "Galerie" avec son propre identifiant et l'appeler ainsi: [gallery galley_id="123"]

  • Vous pouvez gérer vos objets "galeries réelles" sous média, dans une nouvelle section "Galeries"

  • Vous auriez un ensemble de fonctions pour gérer un tel objet. De cette manière, le problème de l'OP serait résolu simplement en transmettant l'identifiant gallery_id à utiliser dans le modèle attachment.php (ou un nouveau modèle gallery.php pouvant également être implémenté) à l'aide de la fonction correspondante.

  • Vous pourrez mélanger des images jointes à divers articles dans un objet de la galerie sans vous soucier de l'article original.

  • Vous pouvez ajouter plusieurs galeries à un message en un tour de main.

Si vous y réfléchissez, c’est en résumé les galeries NextGen. Pas étonnant que les gens utilisent beaucoup ce plugin. Malheureusement, je ne pense pas qu'une fonctionnalité aussi importante devrait être reportée à un plugin, en particulier un très lourd et lourd comme Nextgen, qui contient de nombreuses fonctionnalités superflues.

En ce sens, la logique du nouveau responsable des médias est un peu défectueuse, je pense. Cela suggère en quelque sorte que vous "créez" une nouvelle entité appelée galerie alors qu’elle ne fait que fusionner un tas d’id d’images pour vous.

Je comprends que vous ne verrez pas la faille si vous utilisez l'affichage Carousel de Jetpack, car cela ne vous sortira pas de la page en cours et vous n'aurez pas besoin d'obtenir l'image liée à cette galerie spécifique. vous avez "créé".

Néanmoins, je pense qu’il existe un fossé dangereux entre l’interface utilisateur du nouveau responsable des médias et ce qu’il fait réellement pour montrer une galerie.

    
réponse donnée CamilloMiller 07.02.2013 - 12:16

Lire d'autres questions sur les étiquettes