扩展WP_Customize_Media_Control以返回文件名

时间:2020-02-27 作者:Michael Watson

是否有一种Wordpress“正确”的方法来扩展WP\\u Customize\\u Media\\u控件,以将文件名而不是附件ID返回给WP。自定义预览功能?我正在使用媒体控件保存一个字体文件,我想在更改时在预览中更新该文件。

class myUploadControl extends WP_Customize_Media_Control {


    public $required = array();

    public function returnData($return) {

         return \'filename.ttf\';

    }


 }
我正在寻找一些我可以像上面一样点击并将文件名返回给wp的东西。自定义而不是ID。

我注意到WP\\u Customize\\u Image\\u控件确实返回文件名而不是ID,但这仅适用于图像。

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

我注意到WP\\u Customize\\u Image\\u控件确实返回文件名而不是ID,但这仅适用于图像。

那是因为类扩展了WP_Customize_Upload_Control 其类型设置为upload:

class WP_Customize_Upload_Control extends WP_Customize_Media_Control {
    public $type          = \'upload\';
    public $mime_type     = \'\';
    ...
}
对于使用上述类的定制器控制器,JavaScript控制器是wp.customize.UploadControl 它保存文件URL而不是附件ID。

因此,如果要保存URL而不是ID,则可以:

扩展WP_Customize_Upload_Control:

class myUploadControl extends WP_Customize_Upload_Control {
    ...
}
WP_Customize_Upload_Control:

$wp_customize->add_control( new WP_Customize_Upload_Control( $wp_customize, \'your_setting\', array(
    \'label\'   => \'Label Here\',
    \'section\' => \'section_id\',
    ...
) ) );
注:$wp_customize 是的实例WP_Customize_Manager

但是如果您必须保存ID,但需要在JavaScript中动态获取URL,那么您可以使用wp.apiRequest() 向发出API请求/wp/v2/media/<media ID>:

wp.customize( \'your_setting\', function( value ) {
    value.bind( function( to ) {
        wp.apiRequest( { path: \'/wp/v2/media/\' + to } )
            .then( function ( s ) {
                console.log( s.source_url ); // logs the full URL to the file
                // do your thing
            } );
    } );
} );