函数文档

wp_default_packages_vendor()

💡 云策文档标注

概述

wp_default_packages_vendor() 函数用于注册 WordPress 标准位置 js/dist/vendor/ 下的所有供应商脚本,包括 React、Lodash、Moment 等核心库和 polyfill。它通过 WP_Scripts 对象添加脚本,并处理依赖关系和版本控制。

关键要点

  • 注册位于 /wp-includes/js/dist/vendor/ 的供应商脚本,如 react、lodash、moment 和多个 wp-polyfill-* 脚本。
  • 使用 $vendor_scripts 数组定义脚本句柄和依赖关系,$vendor_scripts_versions 数组指定版本号。
  • 通过 $scripts->add() 方法添加脚本,路径基于 wp_scripts_get_suffix() 生成的 $suffix。
  • 在 init action 触发后,为 lodash 和 moment 添加内联脚本以配置全局变量和本地化设置。

代码示例

function wp_default_packages_vendor( $scripts ) {
    global $wp_locale;

    $suffix = wp_scripts_get_suffix();

    $vendor_scripts = array(
        'react',
        'react-dom'         => array( 'react' ),
        'react-jsx-runtime' => array( 'react' ),
        'regenerator-runtime',
        'moment',
        'lodash',
        'wp-polyfill-fetch',
        'wp-polyfill-formdata',
        'wp-polyfill-node-contains',
        'wp-polyfill-url',
        'wp-polyfill-dom-rect',
        'wp-polyfill-element-closest',
        'wp-polyfill-object-fit',
        'wp-polyfill-inert',
        'wp-polyfill',
    );

    $vendor_scripts_versions = array(
        'react'                       => '18.3.1.1',
        'react-dom'                   => '18.3.1.1',
        'react-jsx-runtime'           => '18.3.1',
        'regenerator-runtime'         => '0.14.1',
        'moment'                      => '2.30.1',
        'lodash'                      => '4.17.21',
        'wp-polyfill-fetch'           => '3.6.20',
        'wp-polyfill-formdata'        => '4.0.10',
        'wp-polyfill-node-contains'   => '4.8.0',
        'wp-polyfill-url'             => '3.6.4',
        'wp-polyfill-dom-rect'        => '4.8.0',
        'wp-polyfill-element-closest' => '3.0.2',
        'wp-polyfill-object-fit'      => '2.3.5',
        'wp-polyfill-inert'           => '3.1.3',
        'wp-polyfill'                 => '3.15.0',
    );

    foreach ( $vendor_scripts as $handle => $dependencies ) {
        if ( is_string( $dependencies ) ) {
            $handle       = $dependencies;
            $dependencies = array();
        }

        $path    = "/wp-includes/js/dist/vendor/$handle$suffix.js";
        $version = $vendor_scripts_versions[ $handle ];

        $scripts->add( $handle, $path, $dependencies, $version, 1 );
    }

    did_action( 'init' ) && $scripts->add_inline_script( 'lodash', 'window.lodash = _.noConflict();' );

    did_action( 'init' ) && $scripts->add_inline_script(
        'moment',
        sprintf(
            "moment.updateLocale( '%s', %s );",
            esc_js( get_user_locale() ),
            wp_json_encode(
                array(
                    'months'         => array_values( $wp_locale->month ),
                    'monthsShort'    => array_values( $wp_locale->month_abbrev ),
                    'weekdays'       => array_values( $wp_locale->weekday ),
                    'weekdaysShort'  => array_values( $wp_locale->weekday_abbrev ),
                    'week'           => array(
                        'dow' => (int) get_option( 'start_of_week', 0 ),
                    ),
                    'longDateFormat' => array(
                        'LT'   => get_option( 'time_format', __( 'g:i a' ) ),
                        'LTS'  => null,
                        'L'    => null,
                        'LL'   => get_option( 'date_format', __( 'F j, Y' ) ),
                        'LLL'  => __( 'F j, Y g:i a' ),
                        'LLLL' => null,
                    ),
                ),
                JSON_HEX_TAG | JSON_UNESCAPED_SLASHES
            )
        ),
        'after'
    );
}

注意事项

  • 此函数在 WordPress 5.0.0 版本引入,通常由 wp_default_packages() 调用,开发者无需直接使用。
  • 脚本注册顺序遵循 wp_default_scripts 的规范,依赖关系通过数组定义。
  • 内联脚本仅在 init action 触发后添加,确保本地化设置正确应用。

📄 原文内容

Registers all the WordPress vendor scripts that are in the standardized js/dist/vendor/ location.

Description

For the order of $scripts->add see wp_default_scripts.

Parameters

$scriptsWP_Scriptsrequired
WP_Scripts object.

Source

function wp_default_packages_vendor( $scripts ) {
	global $wp_locale;

	$suffix = wp_scripts_get_suffix();

	$vendor_scripts = array(
		'react',
		'react-dom'         => array( 'react' ),
		'react-jsx-runtime' => array( 'react' ),
		'regenerator-runtime',
		'moment',
		'lodash',
		'wp-polyfill-fetch',
		'wp-polyfill-formdata',
		'wp-polyfill-node-contains',
		'wp-polyfill-url',
		'wp-polyfill-dom-rect',
		'wp-polyfill-element-closest',
		'wp-polyfill-object-fit',
		'wp-polyfill-inert',
		'wp-polyfill',
	);

	$vendor_scripts_versions = array(
		'react'                       => '18.3.1.1', // Final .1 due to switch to UMD build, can be removed in the next update.
		'react-dom'                   => '18.3.1.1', // Final .1 due to switch to UMD build, can be removed in the next update.
		'react-jsx-runtime'           => '18.3.1',
		'regenerator-runtime'         => '0.14.1',
		'moment'                      => '2.30.1',
		'lodash'                      => '4.17.21',
		'wp-polyfill-fetch'           => '3.6.20',
		'wp-polyfill-formdata'        => '4.0.10',
		'wp-polyfill-node-contains'   => '4.8.0',
		'wp-polyfill-url'             => '3.6.4',
		'wp-polyfill-dom-rect'        => '4.8.0',
		'wp-polyfill-element-closest' => '3.0.2',
		'wp-polyfill-object-fit'      => '2.3.5',
		'wp-polyfill-inert'           => '3.1.3',
		'wp-polyfill'                 => '3.15.0',
	);

	foreach ( $vendor_scripts as $handle => $dependencies ) {
		if ( is_string( $dependencies ) ) {
			$handle       = $dependencies;
			$dependencies = array();
		}

		$path    = "/wp-includes/js/dist/vendor/$handle$suffix.js";
		$version = $vendor_scripts_versions[ $handle ];

		$scripts->add( $handle, $path, $dependencies, $version, 1 );
	}

	did_action( 'init' ) && $scripts->add_inline_script( 'lodash', 'window.lodash = _.noConflict();' );

	did_action( 'init' ) && $scripts->add_inline_script(
		'moment',
		sprintf(
			"moment.updateLocale( '%s', %s );",
			esc_js( get_user_locale() ),
			wp_json_encode(
				array(
					'months'         => array_values( $wp_locale->month ),
					'monthsShort'    => array_values( $wp_locale->month_abbrev ),
					'weekdays'       => array_values( $wp_locale->weekday ),
					'weekdaysShort'  => array_values( $wp_locale->weekday_abbrev ),
					'week'           => array(
						'dow' => (int) get_option( 'start_of_week', 0 ),
					),
					'longDateFormat' => array(
						'LT'   => get_option( 'time_format', __( 'g:i a' ) ),
						'LTS'  => null,
						'L'    => null,
						'LL'   => get_option( 'date_format', __( 'F j, Y' ) ),
						'LLL'  => __( 'F j, Y g:i a' ),
						'LLLL' => null,
					),
				),
				JSON_HEX_TAG | JSON_UNESCAPED_SLASHES
			)
		),
		'after'
	);
}

Changelog

Version Description
5.0.0 Introduced.