Je voudrais changer le balisage créé par [galerie] de ce qui est en standard (dl) à une liste non ordonnée avec une différence. Ci-dessous le balisage souhaité:
<ul>
<li><a href="/path/to/image.jpg"><img src="/path/to/image.jpg" /></a></li>
<li><a href="/path/to/image2.jpg"><img src="/path/to/image2.jpg" /></a></li>
<!-- And so on, all in one ul -->
</ul>
Je veux la source d'image principale pour le lien & img, car je veux exécuter img src via un script de découpage php.
Est-ce possible? Je suis sûr que nous pouvons le casser!
Merci pour vos réponses, Jan & Rarst. Ils m'ont dirigé dans la bonne direction. Voici ce que j'ai fini avec.
Cela désactive les codes courts dans le contenu. Parfait pour ce site et la fonction obtient des images jointes et les recrache sous forme de liste. (J'ai trouvé la fonction quelque part et l'ai réduite un peu)
// Removed shortcodes from the content
add_filter('the_content', 'strip_shortcodes');
// Get attached images & spits out a list of them.
function nerdy_get_images($size = 'thumbnail', $limit = '0', $offset = '0') {
global $post;
$images = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
if ($images) {
$num_of_images = count($images);
if ($offset > 0) : $start = $offset--; else : $start = 0; endif;
if ($limit > 0) : $stop = $limit+$start; else : $stop = $num_of_images; endif;
$i = 0;
foreach ($images as $image) {
if ($start <= $i and $i < $stop) {
$img_title = $image->post_title; // title.
$img_description = $image->post_content; // description.
$img_caption = $image->post_excerpt; // caption.
$img_url = wp_get_attachment_url($image->ID); // url of the full size image.
$preview_array = image_downsize( $image->ID, $size );
$img_preview = $preview_array[0]; // thumbnail or medium image to use for preview.
?>
<li>
<a href="<?php echo $img_url; ?>"><img src="<?php echo $img_preview; ?>" alt="<?php echo $img_caption; ?>" title="<?php echo $img_title; ?>"></a>
</li>
<?
}
$i++;
}
}
}
Ceci est l'appel dans single.php
<ul>
<?php nerdy_get_images('medium','0','0'); ?>
</ul>
Cela crache une liste exactement comme je le voulais.
Encore une fois, merci les gars!
La sortie des éléments de la fonction gallery_shortcode()
n'est pas filtrée. Aucune possibilité de le modifier ici. Le balisage ne peut être remplacé que dans son intégralité, à l’aide du filtre post_gallery
qui s’exécute au début. C'est un peu peu conventionnel comparé au résultat final de filtrage habituel et c'est probablement pour des raisons de performances (la génération d'une galerie peut être très lourde en calcul).
Mais il utilise wp_get_attachment_link()
pour générer des liens et sa sortie est filtrée par le crochet wp_get_attachment_link
avec beaucoup de détails:
apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text );
Avez-vous besoin d'effectuer un recadrage très complexe pour lequel vous souhaitez qu'un script séparé le gère? Pourquoi ne pas laisser WP le gérer avec add_image_size()
?
Si vous souhaitez remplacer les listes dl
par des listes ul
sur toutes les galeries, et pas seulement sur celles qui le demandent via des attributs supplémentaires, vous pouvez vous connecter au filtre post_gallery
exécuté au début de la fonction gallery_shortcode
. Là, vous pouvez remplacer et définir les valeurs par défaut pour les attributs.
La sortie finale n'est pas filtrée, mais je suppose qu'il devrait être possible de supprimer le gestionnaire de shortcode par défaut pour gallery
et d'ajouter votre propre fonction qui enveloppe gallery_shortcode()
mais ajoute le traitement final à la fin. Ou essayez de vous connecter à wp_get_attachment_link
, comme le suggère Rarst .