it-swarm.com.de

Ändern der Größe der Miniaturansichten von Playlist-Shortcodes?

Ich verwende do_shortcode(), um eine benutzerdefinierte WordPress-Audio-Wiedergabeliste anzuzeigen. Standardmäßig lädt die Wiedergabeliste Coverbilder für jede Audiodatei (das im Anhang enthaltene Bild) und ändert sich je nach aktuell abgespieltem Titel. Die Sache ist, standardmäßig lädt es die 150px x 150px Miniaturansicht, aber ich möchte eine größere Größe laden. Es scheint keine einfache Möglichkeit zu geben, die Größe zu ändern. Hier ist der Code, mit dem ich arbeite:

do_shortcode( '[playlist ids="100, 101, 102, 103, 104, 105, 106"][/playlist]' );

Ich habe versucht, die Größe der Thumbnails in function.php mit set_post_thumbnail_size() zu ändern, und habe Thumbnails neu generieren ausgeführt, aber nichts hat sich geändert.

Ich habe auch den WordPress-Kern durchsucht und festgestellt, dass die Funktion, die den Shortcode für die Wiedergabeliste steuert, wp_playlist_shortcode() heißt. Es gibt ein bisschen Code, der die Größe des Thumbnails festlegt. Ich habe es bearbeitet, um zu sehen, was passiert ist, und es ist das einzige, was bisher funktioniert hat. Das ist natürlich nicht der richtige Weg, aber dort stecke ich momentan fest. Ich bin mir nicht sicher, ob ich das auch hier ablegen soll. Ich würde mich über Hinweise und Hilfe freuen, die ich bekommen kann.

2
charlenemasters

Demo Plugin - Feste Größe

Hier ist ein Vorschlag als Demo-Plugin (PHP 5.4+):

<?php
/* Plugin Name: Custom Playlist Thumb Size */

namespace WPSE238646\PlaylistThumbSize;

add_shortcode( 'playlist', function( $atts = [], $content = '' )
{
    add_filter( 'wp_get_attachment_image_src', __NAMESPACE__ . '\\src' , 10, 3 );
    $out = wp_playlist_shortcode( $atts, $content );
    remove_filter( 'wp_get_attachment_image_src', __NAMESPACE__ . '\\src' );    
    return $out;        
} );

function src( $image, $id, $size )
{
    add_filter( 'image_downsize', __NAMESPACE__ . '\\size', 10, 3 );
    return $image;
}

function size( $downsize, $id, $size )
{
    remove_filter( current_filter(), __FUNCTION__ );
    if( 'thumbnail' !== $size )
        return $downsize;   
    return image_downsize( $id, $size = 'large' );           // <-- Adjust size here!
}

Hier ändern wir die Daumengröße von 'thumbnail' zu 'large'.

Zuerst überschreiben wir den Rückruf des Wiedergabelisten-Shortcodes, um unsere Filter besser zu nutzen und nur die Shortcodes für die Wiedergabeliste als Ziel festzulegen.

Dann schließen wir uns dem image_downsize-Filter an, um die image_downsize()-Funktion mit der gewünschten Daumengröße aufzurufen. Wir müssen jedoch daran denken, unseren Filter-Callback sofort zu entfernen, um eine unendliche rekursive Schleife zu vermeiden.

Demo Plugin - Verschiedene Größen

Es wäre jedoch flexibler, wenn wir die Daumengröße als Shortcode-Attribut schreiben könnten:

[playlist ids="12,34,56" _size="large"]
[playlist ids="12,34,56" _size="medium"]

Hier stellen wir unserem _size-Attribut einen Unterstrich voran, für den Fall, dass es in Zukunft von Core unterstützt wird.

Hier ist eine Modifikation unseres ersten Demo-Plugins, die dies unterstützt (in kompakter Form):

<?php
/* Plugin Name: Playlist With _size Attribute */

namespace WPSE238646\PlaylistThumbSize;

add_shortcode( 'playlist', [ (new Playlist), 'shortcode' ] );

class Playlist
{
    protected $_size;

    public function shortcode( $atts = [], $content = '' )
    {
        $allowed_sizes = (array) get_intermediate_image_sizes(); // <-- Allowed sizes
        $this->_size = 'thumbnail';  // <-- Default size
        if( ! empty( $atts['_size' ] ) && in_array( $atts['_size' ], $allowed_sizes ) )
            $this->_size = $atts['_size' ]; 
        add_filter( 'wp_get_attachment_image_src', [ $this, 'src' ] , 10, 3 );
        $out = wp_playlist_shortcode( $atts, $content );  // <-- Native playlist
        remove_filter( 'wp_get_attachment_image_src', [ $this, 'src' ] );
        return $out;       
    }     
    public function src( $image, $id, $size )
    {
        add_filter( 'image_downsize', [ $this, 'size' ], 10, 3 );
        return $image;
    }
    public function size( $downsize, $id, $size )
    {
        remove_filter( current_filter(), [ $this, 'size' ] );
        if( 'thumbnail' !== $size )
            return $downsize;  
        return image_downsize( $id, $this->_size ); // <--Apply new size
    }
} // end class

Hier beschränken wir die erlaubten Größen auf get_intermediate_image_sizes().

Hoffentlich können Sie dies weiter testen und an Ihre Bedürfnisse anpassen!

4
birgire