it-swarm.com.de

Wie kann man Galerien "kombinieren" oder mehrere Galerien als eine anzeigen?

Nehmen wir also an, ich führe einen TV-Show-Blog. Eines Tages veröffentlicht die Show eine Reihe von 10 Screencaps aus einer kommenden Episode für die Öffentlichkeit. Ich poste das in meinem Blog, entweder als Post mit mehreren Bildern oder speziell als "Galerie" -Post - so oder so können Leser das gesamte Bild, das an diesen Post angehängt ist, als Galerie anzeigen.

Dann veröffentlichen sie einige Tage und einige Posts später 10 weitere Screencaps aus derselben kommenden Episode. Ich möchte einen separaten Beitrag verfassen, anstatt den alten zu überarbeiten, aber ich möchte auch irgendwie in der Lage sein, alle Screencaps (20) aus dieser bestimmten Episode in einer einzigen Galerie anzuzeigen. Oder zumindest wie eine einzelne Galerie aussehen würde.

Möglich? (Am besten ohne NextGEN oder andere Plugins ... versuche so viel wie möglich mit den nativen Fähigkeiten von WordPress zu erreichen, bevor ich Plugins staple.)

2
Chris

Mit dem voreingestellten [gallery] shortcode gibt es keine einfache Möglichkeit, verschiedene Galerien in einer zu kombinieren. Sie können entweder zwei verschiedene Galerien angeben: eine für den aktuellen Beitrag und eine für einen anderen Beitrag, angegeben durch die Beitrags-ID:

[gallery]
[gallery id=42]

Sie können auch eine Galerie erstellen, indem Sie alle Anhangs-IDs explizit angeben:

[gallery include="23,39,45"]

Das Angeben mehrerer Beitrags-IDs funktioniert nicht, da gallery_shortcode()get_children() verwendet, um die Anhänge abzurufen, die get_posts() verwenden, die die Standardklasse WP_Query verwenden, und dies nur einen numerischen post_parent-Wert zulässt.

Allerdings können wir die Tatsache ausnutzen, dass es oben in gallery_shortcode() einen Filter gibt, mit dem Plugins das Standardlayout der Galerie überschreiben können. Das folgende Beispiel sucht nach einem id-Parameter mit mehreren IDs (oder dem speziellen Schlüsselwort this), ruft alle Anhänge dieser Posts ab und fügt sie in ein explizites include-Attribut ein, mit dem die Galerie-Funktion erneut aufgerufen wird. Auf diese Weise können Sie verschiedene Galerien wie folgt kombinieren: [gallery id=this,8]. Sie können diese Idee erweitern, um auch andere Attribute zu unterstützen.

add_filter( 'post_gallery', 'wpse18689_post_gallery', 5, 2 );
function wpse18689_post_gallery( $gallery, $attr )
{
    if ( ! is_array( $attr ) || array_key_exists( 'wpse18689_passed', $attr ) ) {
        return '';
    }
    $attr['wpse18689_passed'] = true;

    if ( false !== strpos( $attr['id'], ',' ) ) {
        $id_attr = shortcode_atts( array(
            'id' => 'this',
            'order' => 'ASC',
            'orderby'    => 'menu_order ID',
        ), $attr );
        $all_attachment_ids = array();
        $post_ids = explode( ',', $id_attr['id'] );
        foreach ( $post_ids as $post_id ) {
            if ( 'this' == $post_id ) {
                $post_id = $GLOBALS['post']->ID;
            }
            $post_attachments = get_children( array(
                'post_parent' => $post_id,
                'post_status' => 'inherit',
                'post_type' => 'attachment',
                'post_mime_type' => 'image',
                'order' => $id_attr['order'],
                'orderby' => $id_attr['orderby'],
            ), ARRAY_A );
            $all_attachment_ids = array_merge( $all_attachment_ids, array_keys( $post_attachments ) );
        }
        $attr['include'] = implode( ',', $all_attachment_ids );
        $attr['id'] = null;
    }

    return gallery_shortcode( $attr );
}
1
Jan Fabry