Wie kann ich das Markup [Galerie] ändern?

8

Ich möchte das von [gallery] erstellte Markup von Standard (dl) in eine ungeordnete Liste mit einem Unterschied ändern. Unten ist das gewünschte Markup:

<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> 

Ich möchte die Hauptbildquelle für den Link & img, da ich das img src über ein PHP-Cropper-Skript ausführen möchte.

Ist das möglich? Ich bin sicher, wir können es knacken!

PaulAdamDavis
quelle

Antworten:

3

Vielen Dank für Ihre Antworten, Jan & Rarst. Sie wiesen mich in die richtige Richtung. Hier ist, was ich am Ende hatte.

Dadurch werden Shortcodes im Inhalt deaktiviert. Perfekt für diese Seite und die Funktion erhält angehängte Bilder und spuckt sie als Liste aus. (Ich habe die Funktion irgendwo gefunden und etwas verkleinert)

// 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++;
        }
    }
}

Dies ist der Aufruf in single.php

<ul>
    <?php nerdy_get_images('medium','0','0'); ?>
</ul>

Dies spuckt eine Liste genau so aus, wie ich es wollte.

Nochmals vielen Dank Jungs!

PaulAdamDavis
quelle
3

Die Ausgabe von Elementen in der gallery_shortcode()Funktion wird nicht gefiltert, daher besteht keine Möglichkeit, sie dort zu ändern. Markup kann nur vollständig ersetzt werden, indem ein post_galleryFilter verwendet wird, der zu Beginn ausgeführt wird. Es ist ein wenig unkonventionell im Vergleich zum üblichen Filterergebnis und wahrscheinlich aus Leistungsgründen (das Generieren einer Galerie kann sehr rechenintensiv sein).

Aber es wird verwendet wp_get_attachment_link(), um Links zu generieren, und seine Ausgabe wird durch den wp_get_attachment_linkHook mit vielen Details gefiltert :

apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text );

Müssen Sie eine wirklich komplexe Beschneidung ausführen, für die ein separates Skript verwendet werden soll? Warum lassen Sie WP nicht damit umgehen add_image_size()?

Selten
quelle
1

Wenn Sie möchten, dass dlListen in ulListen für alle Galerien geändert werden , nicht nur für diejenigen, die dies über zusätzliche Attribute anfordern, können Sie sich in den post_galleryFilter einbinden, der zu Beginn der gallery_shortcodeFunktion ausgeführt wird . Dort können Sie Standardwerte für die Attribute überschreiben und festlegen.

Die endgültige Ausgabe wird nicht gefiltert, aber ich denke, es sollte möglich sein, den Standard-Shortcode-Handler für zu entfernen galleryund eine eigene Funktion hinzuzufügen, die umschließt, gallery_shortcode()aber am Ende die endgültige Verarbeitung hinzufügt. Oder versuchen Sie es wp_get_attachment_link, wie Rarst vorschlägt .

Jan Fabry
quelle
-2

So mache ich es gerade. Ich habe 2 Codes, einen zum Anzeigen des Galerie-Shortcodes und einen zum Anzeigen des restlichen Inhalts:

Der erste Code lautet:

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\‹)/';
$ match = '';
preg_match ($ match, get_the_content (), $ Matches, PREG_OFFSET_CAPTURE);
if ($ entspricht):
    $ Übereinstimmungen = $ Übereinstimmungen [0];
    $ gallery = $ match [0];
    Echo '';
    do_shortcode ($ gallery);
    Echo '';
endif;

Und der zweite:

$ match = '/(\[)(gallery).*?(ids).*?(\‹)/';
$ content = preg_replace ($ match, '', get_the_content ());
if (! leer ($ content)):
    $ content = ''. $ content. wp_link_pages (Array ('vor' => ''. __ ('Seiten:', 'veento'), 'nach' => '')). '';
    print $ content;
endif;
Mariano Miguel
quelle
1
do_shortcode($gallery);druckt nichts. Und was bedeutet das echo '';?
Fuxia