所以这可能有点骇人
我的意思是,与
overriding the default Featured Image panel/component in the Gutenberg block editor, 这并不是很难,但这个要简单得多,基本上只需要几行自定义编码。(读到最后才明白我的意思)
我也尝试过&;在WordPress 5.4.2(写作时的最新版本)和WordPress 5.4.1上测试了它的工作能力(使用旧/经典编辑器和Gutenberg块编辑器)。
因此,对于您尝试执行的操作,您可以覆盖wp.media.model.Query.prototype.sync()
(定义见wp-includes/js/media-models.js
) 这是默认特征图像模式用于通过AJAX查询附件的功能(admin-ajax.php?action=query-attachments
).
完整(JS)代码
wp.media.model.Query.prototype.sync = function( method, model, options ) {
var args, fallback;
// Overload the read method so Attachment.fetch() functions correctly.
if ( \'read\' === method ) {
options = options || {};
options.context = this;
options.data = _.extend( options.data || {}, {
action: \'query-attachments\',
post_id: wp.media.model.settings.post.id
});
// Clone the args so manipulation is non-destructive.
args = _.clone( this.args );
// Determine which page to query.
if ( -1 !== args.posts_per_page ) {
args.paged = Math.round( this.length / args.posts_per_page ) + 1;
}
if ( wp.media.frame && \'featured-image\' === wp.media.frame.options.state ) {
// Here I\'m allowing image and PDF files only.
args.post_mime_type = \'image, application/pdf\';
}
options.data.query = args;
return wp.media.ajax( options );
// Otherwise, fall back to `Backbone.sync()`.
} else {
/**
* Call wp.media.model.Attachments.sync or Backbone.sync
*/
fallback = Attachments.prototype.sync ? Attachments.prototype : Backbone;
return fallback.sync.apply( this, arguments );
}
};
但我在那里添加的唯一一件事是这个条件块:if ( wp.media.frame && \'featured-image\' === wp.media.frame.options.state ) {
// Here I\'m allowing image and PDF files only.
args.post_mime_type = \'image, application/pdf\';
}
检查当前打开的模式是否为特征图像模式,如果是,则修改
post_mime_type
argument 定义要查询的附件的MIME类型。
这就是如何使用这种方法来强制特色图像模式包括图像以外的文件。
PHP代码示例(向其他读者)于6月13日更新media-models
脚本,这是因为我们正在重写该脚本中的某些内容,因此如果当前页面上没有加载该脚本,则无需对自定义脚本进行回显/排队。:)
以下是我用来在后期编辑屏幕上响应页脚脚本的PHP代码post
和page
职位类型:
add_action( \'admin_print_footer_scripts\', function () {
$screen_ids = [ \'post\', \'page\' ];
if ( in_array( get_current_screen()->id, $screen_ids ) &&
wp_script_is( \'media-models\' ) // check if media-models.js was enqueued
) :
?>
<script>
// See/copy the FULL code above and place it here..
</script>
<?php
endif;
} );
如果将脚本放在外部JS文件中,还应确保
media-models
脚本已排队:
add_action( \'admin_enqueue_scripts\', function () {
$screen_ids = [ \'post\', \'page\' ];
if ( in_array( get_current_screen()->id, $screen_ids ) &&
wp_script_is( \'media-models\' ) // check if media-models.js was enqueued
) {
wp_enqueue_script( \'my-script\', \'/path/to/my-script.js\', [], \'\', true );
}
} );