web-dev-qa-db-ja.com

プレイリストのショートコードのサムネイルサイズを変更しますか?

私はカスタムWordPressオーディオプレイリストを表示するためにdo_shortcode()を使っています。デフォルトでは、プレイリストは各オーディオファイル(添付ファイルの注目画像)のカバーアートを読み込み、現在再生されているトラックに応じて変更されます。問題は、デフォルトでそれが150px x 150pxのサムネイルをロードすることですが、私はもっと大きいサイズをロードしたいです。サイズを変更する簡単な方法はないようです。これが私が取り組んでいるコードです。

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

私はset_post_thumbnail_size()を使ってfunction.phpのサムネイルサイズを変えて再生サムネイルを走らせてみましたが、何も変わりませんでした。

また、WordPressのコアを検索したところ、プレイリストのショートコードを制御する関数がwp_playlist_shortcode()であることがわかりました。サムネイルのサイズを設定するコードが少しあります。何が起こったのかを見るためだけに編集しましたが、これまでのところうまくいったのはそれだけです。明らかに、それは進むべき道ではありません、しかしそれは私が現在立ち往生しているところです。私もここにそれを捨てるべきであるかどうかわからない、私はすべてのポインターに感謝し、私が得ることができるのを手助けするでしょう。

2
charlenemasters

デモプラグイン - 固定サイズ

これはデモプラグインとしての提案です(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属性の前にアンダースコアを付けます。

これをサポートするための最初のデモプラグインを(コンパクトな形式で)修正したものがあります。

<?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()に制限します。

うまくいけば、これをさらにテストして自分のニーズに合わせることができます。

4
birgire