是否更改播放列表快捷代码缩略图大小?

时间:2016-09-08 作者:charlenemasters

我正在使用do_shortcode() 要显示自定义WordPress音频播放列表。默认情况下,播放列表将加载每个音频文件(附件的特色图像)的封面艺术,并根据当前播放的曲目进行更改。问题是,默认情况下,它加载150px x 150px缩略图,但我想加载更大的尺寸。改变尺寸似乎不是一个简单的选择。以下是我正在使用的代码:

do_shortcode( \'[playlist ids="100, 101, 102, 103, 104, 105, 106"][/playlist]\' );
我尝试在函数中更改缩略图大小。使用phpset_post_thumbnail_size() 并运行了“重新生成缩略图”,但没有任何更改。

我还搜索了WordPress核心,发现控制播放列表短代码的函数被调用wp_playlist_shortcode(). 有一些代码可以设置缩略图的大小。我编辑它只是为了看看发生了什么,这是迄今为止唯一有效的方法。显然,这不是我要走的路,但这正是我目前所处的困境。我不知道我是否应该把它也扔在这里,如果能得到任何建议和帮助,我将不胜感激。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

演示插件-固定大小

这里有一个建议作为演示插件(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!
}
这里我们将拇指大小从\'thumbnail\'\'large\'.

首先,我们覆盖播放列表短代码回调,以便更好地确定过滤器的范围,并仅针对播放列表短代码。

然后,我们将image_downsize 根据我们的需要进行筛选,以调用image_downsize() 具有所需拇指大小的函数。但我们必须记住立即删除过滤器回调,以避免无限递归循环。

演示插件-各种大小,但如果我们可以将拇指大小写为短代码属性,则会更加灵活:

[playlist ids="12,34,56" _size="large"]
[playlist ids="12,34,56" _size="medium"]
我们在这里加前缀_size 属性,以防将来core支持它。

下面是对我们的第一个演示插件的修改,以支持这一点(以紧凑的形式):

<?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
在此,我们将允许的大小限制为get_intermediate_image_sizes().

希望您可以进一步测试这一点,并根据您的需要进行调整!

相关推荐

Broken Images and Style

将Wordpress移动到另一个帐户后,样式和图像将被破坏。我曾尝试禁用插件,检查并更新“插件”;上载“;数据库中的文件夹,检查文件夹和文件权限,重新保存永久链接,将代码添加到wp配置。。。没有人修复此问题。此处截图:https://prnt.sc/v9mxqt有什么建议吗谢谢