Bloc-note d'un développeur web
Dans : Outils, trucs et astuces
26 août 2009Julien a présenté ce 25 août 2009 une fonction d’affichage des miniatures liées à un même article pour WordPress. Bien que fonctionnelle, elle ne se révèle pas être des plus pratique.
Note :
J’écris ici même parce qu’en fin de billet je colle une fonction qui ferait un peu pavé dans les commentaires de l’article de Julien. Je ne fais également plus confiance aux services de pasties en ligne, ayant perdu trop d’extraits de code…
Comme le relève OncleTom, la présentation et la logique sont mélangées.
La fonction wallthumb dispose d’un argument $id qui est finalement inutile. Il sert simplement à tester la vignette courante, mais, comme la fonction est à appeler sur la page d’un media, l’élément courant est obligatoirement le media affiché.
Enfin, les arguments de présentation cassent avec la logique introduite par WordPress. Dans son API, ce dernier fait généralement appel à un unique argument1, passé sous la forme d’un tableau ou d’une chaîne de caractères.
Ci-dessous, une fonction de remplacement à ajouter dans le fichier functions.php de votre thème.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | <?php /** * Retrieve the list of images attached to the same post that the current attachment. * * @author Mehdi Kabab <http://pioupioum.fr> * @copyright Copyright (C) 2009 Mehdi Kabab * @license http://www.gnu.org/licenses/gpl.html GNU GPL version 3 or later * * @link http://www.webinventif.fr/wordpress-afficher-toutes-miniatures-liees-article-pages-media/ Inspiration * * @param string $output Optional. Constant for return type, either OBJECT (default), ARRAY_A, ARRAY_N. * @return array|bool False on failure **/ function get_other_attachments($output = OBJECT) { global $post; if (!is_attachment() || false === (bool) $post->post_parent) return false; $attachments = get_children(array( 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => 'inherit', 'post_parent' => $post->post_parent ), $output); return $attachments; } /** * Display the HTML list of images attached to the same post that the current attachment. * * Only works on an attachment page. * * @author Mehdi Kabab <http://pioupioum.fr> * @copyright Copyright (C) 2009 Mehdi Kabab * @license http://www.gnu.org/licenses/gpl.html GNU GPL version 3 or later * * @link http://www.webinventif.fr/wordpress-afficher-toutes-miniatures-liees-article-pages-media/ Inspiration * * @param string|array $args Optional. User defined arguments for replacing the defaults. * @return bool False on failure. */ function wallthumb($args = array()) { global $post; $attachments = get_other_attachments(); if (!$attachments) return false; $defaults = array( 'id' => 'gallery-%d', 'current_class' => 'current', 'thumb_class' => 'gallerythumb', 'before_thumb' => '<li class="%s">', 'after_thumb' => '</li>', 'before_list' => '<ul id="%s">', 'after_list' => '</ul>', ); $args = wp_parse_args($args, $defaults); $current_id = $post->ID; $thumb_class = trim($args['thumb_class']); static $i = 0; $stack = array(sprintf($args['before_list'], sprintf($args['id'], ++$i))); foreach ($attachments as $attachment) { if ($current_id != $attachment->ID) { $buf = sprintf($args['before_thumb'], $thumb_class); } else { $buf = sprintf($args['before_thumb'], trim($thumb_class . ' ' . $args['current_class'])); } $buf .= sprintf('<a href="%s" title="%s" rel="attachment">%s</a>', get_attachment_link($attachment->ID), esc_attr(get_the_title($attachment->ID)), wp_get_attachment_image($attachment->ID, 'thumbnail') ); $buf .= $args['after_thumb']; $stack[] = $buf; } echo implode("\n\t", $stack) . "\n{$args['after_list']}"; } |
Ralalala c’est malin maintenant j’ai honte de ma fonction toute cracra ^_^’
Merci pour cette mise au propre en tout cas
Je vais tester ! Merci du partage !
On peut également faire cette manip
De rien, il faut bien s’entraider
@Valentin effectivement, nous pouvons faire appel à
en remplacement du bloc :
Thx
Pas mal…
[…] Voir la méthode de Mehdi ! […]
Merci pour cette fonction.
Une petite question : au moment d’uploader une image, on rentre sa légende, description, et titre. Je n’arrive pas à les récupérer ensuite. Une idée ?
Merci d’avance.
La description est accessible via la propriété
post_contentet on accède à la légende à l’aide de la propriétépost_excerpt.Ainsi, en utilisant
get_other_attachments(), nous obtenons ce qui suit :Les informations sont également disponibles si vous utilisez la fonction
get_children().avec WP 2.9 on peut utiliser des attributs include/exclude pour créer une galerie personnalisée. Comment faire pour que les images sélectionnées « suivent » dans le wallthumb ? Avec le code toutes les images de la galerie apparaissent
Merci de ton aide.