函数文档

wp_plupload_default_settings()

💡 云策文档标注

概述

wp_plupload_default_settings() 函数用于生成并输出 Plupload 的默认设置,包括上传参数、过滤器配置和浏览器支持检测。它通过 wp_scripts() 管理脚本数据,并应用过滤器允许开发者自定义设置。

关键要点

  • 函数生成 Plupload 的默认设置数组,包括文件上传 URL、最大文件大小和允许的扩展名。
  • 针对移动设备和特定浏览器版本(如 iOS 7.x)进行条件设置,例如禁用多文件选择。
  • 检查图像编辑器对 WebP、AVIF 和 HEIC 格式的支持,并相应设置错误标志。
  • 使用 apply_filters 钩子(如 plupload_default_settings 和 plupload_default_params)允许开发者修改默认设置和参数。
  • 最终设置通过 wp_json_encode 编码为 JavaScript 变量 _wpPluploadSettings,并添加到 wp-plupload 脚本数据中。

代码示例

// 示例:使用过滤器修改 Plupload 默认设置
add_filter( 'plupload_default_settings', function( $defaults ) {
    $defaults['filters']['max_file_size'] = '10485760b'; // 设置为 10MB
    return $defaults;
} );

注意事项

  • 从 WordPress 4.9 开始,Plupload 的 runtimes 设置固定为 'html5,html4',flash_swf_url 和 silverlight_xap_url 不再使用。
  • 在 iOS 7.x 的 Safari 移动版中,由于已知 bug,多文件上传被禁用以避免视频上传问题。
  • 函数依赖于多个辅助函数,如 wp_max_upload_size() 和 get_allowed_mime_types(),确保上传设置符合服务器配置。

📄 原文内容

Prints default Plupload arguments.

Source

function wp_plupload_default_settings() {
	$wp_scripts = wp_scripts();

	$data = $wp_scripts->get_data( 'wp-plupload', 'data' );
	if ( $data && str_contains( $data, '_wpPluploadSettings' ) ) {
		return;
	}

	$max_upload_size    = wp_max_upload_size();
	$allowed_extensions = array_keys( get_allowed_mime_types() );
	$extensions         = array();
	foreach ( $allowed_extensions as $extension ) {
		$extensions = array_merge( $extensions, explode( '|', $extension ) );
	}

	/*
	 * Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4`,
	 * and the `flash_swf_url` and `silverlight_xap_url` are not used.
	 */
	$defaults = array(
		'file_data_name' => 'async-upload', // Key passed to $_FILE.
		'url'            => admin_url( 'async-upload.php', 'relative' ),
		'filters'        => array(
			'max_file_size' => $max_upload_size . 'b',
			'mime_types'    => array( array( 'extensions' => implode( ',', $extensions ) ) ),
		),
	);

	/*
	 * Currently only iOS Safari supports multiple files uploading,
	 * but iOS 7.x has a bug that prevents uploading of videos when enabled.
	 * See #29602.
	 */
	if ( wp_is_mobile()
		&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' )
		&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' )
	) {
		$defaults['multi_selection'] = false;
	}

	// Check if WebP images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
		$defaults['webp_upload_error'] = true;
	}

	// Check if AVIF images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) {
		$defaults['avif_upload_error'] = true;
	}

	// Check if HEIC images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/heic' ) ) ) {
		$defaults['heic_upload_error'] = true;
	}

	/**
	 * Filters the Plupload default settings.
	 *
	 * @since 3.4.0
	 *
	 * @param array $defaults Default Plupload settings array.
	 */
	$defaults = apply_filters( 'plupload_default_settings', $defaults );

	$params = array(
		'action' => 'upload-attachment',
	);

	/**
	 * Filters the Plupload default parameters.
	 *
	 * @since 3.4.0
	 *
	 * @param array $params Default Plupload parameters array.
	 */
	$params = apply_filters( 'plupload_default_params', $params );

	$params['_wpnonce'] = wp_create_nonce( 'media-form' );

	$defaults['multipart_params'] = $params;

	$settings = array(
		'defaults'      => $defaults,
		'browser'       => array(
			'mobile'    => wp_is_mobile(),
			'supported' => _device_can_upload(),
		),
		'limitExceeded' => is_multisite() && ! is_upload_space_available(),
	);

	$script = 'var _wpPluploadSettings = ' . wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ';';

	if ( $data ) {
		$script = "$datan$script";
	}

	$wp_scripts->add_data( 'wp-plupload', 'data', $script );
}

Hooks

apply_filters( ‘plupload_default_params’, array $params )

Filters the Plupload default parameters.

apply_filters( ‘plupload_default_settings’, array $defaults )

Filters the Plupload default settings.

Changelog

Version Description
3.4.0 Introduced.