Comment puis-je modifier le balisage [galerie]?

8

Je voudrais changer le balisage créé par [galerie] de ce que c'est comme standard (dl) à une liste non ordonnée avec une différence. Voici 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 l'img src via un script de recadrage php.

Est-ce possible? Je suis sûr que nous pouvons le casser!

PaulAdamDavis
la source

Réponses:

3

Merci pour vos réponses, Jan & Rarst. Ils m'ont pointé dans la bonne direction. Voici ce que j'ai fini avec.

Cela désactive les shortcodes 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 je l'ai allégée 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!

PaulAdamDavis
la source
3

La sortie des éléments dans la gallery_shortcode()fonction n'est pas filtrée, donc aucune possibilité de la modifier à cet endroit. Le balisage ne peut être remplacé qu'en totalité, à l'aide d'un post_galleryfiltre qui s'exécute au début. C'est un peu peu conventionnel par rapport au résultat final de filtrage habituel et c'est probablement pour des raisons de performances (la génération de la galerie peut être considérablement lourde en termes de calcul).

Mais il utilise wp_get_attachment_link()pour générer des liens et sa sortie est filtrée par le wp_get_attachment_linkcrochet 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 avec lequel vous souhaitez qu'un script séparé le gère? Pourquoi ne pas laisser WP le gérer add_image_size()?

Rarst
la source
1

Si vous voulez changer les dllistes en ullistes sur toutes les galeries, pas seulement sur celles qui le demandent via des attributs supplémentaires, vous pouvez vous connecter au post_galleryfiltre qui s'exécute au début de la gallery_shortcodefonction . Vous pouvez y remplacer et définir des 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 encapsule gallery_shortcode()mais ajoute le traitement final à la fin. Ou essayez de vous y connecterwp_get_attachment_link , comme le suggère Rarst .

Jan Fabry
la source
-2

C'est ainsi que je le fais en ce moment. J'ai 2 codes, un pour afficher le shortcode de la galerie et un autre pour afficher le reste du contenu:

Le premier code est:

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\[)/';
$ matches = '';
preg_match ($ match, get_the_content (), $ matches, PREG_OFFSET_CAPTURE);
si ($ correspond):
    $ matches = $ matches [0];
    $ gallery = $ correspond à [0];
    écho '';
    do_shortcode ($ gallery);
    écho '';
fin si;

Et le second:

$ match = '/(\[)(gallery).*?(ids).*?(\[)/';
$ content = preg_replace ($ match, '', get_the_content ());
si (! vide ($ content)):
    $ content = ''. $ content. wp_link_pages (array ('before' => ''. __ ('Pages:', 'veento'), 'after' => '')). '';
    imprimer $ content;
fin si;
Mariano Miguel
la source
1
do_shortcode($gallery);n'imprime rien. Et quel est le sens de echo '';?
fuxia