¿Cambiar el tamaño de las miniaturas del shortcode de la lista de reproducción?

2

Estoy usando do_shortcode() para mostrar una lista de reproducción de audio personalizada de WordPress. De forma predeterminada, la lista de reproducción cargará la portada de cada archivo de audio (la imagen destacada del archivo adjunto) y cambiará de acuerdo con la pista que se esté reproduciendo actualmente. El problema es que, por defecto, carga la miniatura de 150px x 150px, pero me gustaría cargar un tamaño más grande. No parece haber una opción simple para cambiar el tamaño. Aquí está el código con el que estoy trabajando:

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

Intenté cambiar el tamaño de la miniatura en function.php usando set_post_thumbnail_size() y ejecuté Regenerar miniaturas, pero nada cambió.

También busqué en el núcleo de WordPress y encontré que la función que controla el shortcode de la lista de reproducción se llama wp_playlist_shortcode() . Hay un poco de código que establece el tamaño de la miniatura. Lo edité solo para ver qué sucedió, y es lo único que funcionó hasta ahora. Obviamente, ese no es el camino a seguir, pero ahí es donde actualmente estoy atascado. No estoy seguro de si también debería descartar eso aquí, agradecería cualquier sugerencia y ayuda que pueda obtener.

    
pregunta charlenemasters 08.09.2016 - 21:05

1 respuesta

4

Complemento de demostración - Tamaño fijo

Aquí hay una sugerencia como complemento de demostración (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!
}

Aquí cambiamos el tamaño del pulgar de 'thumbnail' a 'large' .

Primero, anulamos la devolución de llamada del shortcode de la lista de reproducción, para ampliar el alcance de nuestros filtros y solo orientar los códigos cortos de la lista de reproducción.

Luego nos conectamos al filtro image_downsize a nuestras necesidades, para llamar a la función image_downsize() con el tamaño del pulgar deseado. Pero debemos recordar eliminar nuestro callback de filtro de inmediato para evitar un bucle recursivo infinito.

Complemento de demostración: varios tamaños

Pero sería más flexible si pudiéramos escribir el tamaño del pulgar como un atributo de código corto:

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

Aquí prefijamos nuestro atributo _size con un guión bajo, en caso de que sea compatible con el núcleo en el futuro.

Aquí hay una modificación de nuestro primer complemento de demostración para admitir eso (en forma compacta):

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

Aquí restringimos los tamaños permitidos a get_intermediate_image_sizes() .

¡Espero que puedas probar esto más a fondo y adaptarte a tus necesidades!

    
respondido por el birgire 10.09.2016 - 11:37

Lea otras preguntas en las etiquetas