Automattic\WooCommerce\Internal\Admin

Loader::add_component_settings()public staticWC 1.0

Hooks extra necessary data into the component settings array already set in WooCommerce core.

Метод класса: Loader{}

Возвращает

Массив. Array of component settings.

Использование

$result = Loader::add_component_settings( $settings );
$settings(массив) (обязательный)
Array of component settings.

Код Loader::add_component_settings() WC 8.7.0

public static function add_component_settings( $settings ) {
	if ( ! is_admin() ) {
		return $settings;
	}

	if ( ! function_exists( 'wc_blocks_container' ) ) {
		global $wp_locale;
		// inject data not available via older versions of wc_blocks/woo.
		$settings['orderStatuses'] = self::get_order_statuses( wc_get_order_statuses() );
		$settings['stockStatuses'] = self::get_order_statuses( wc_get_product_stock_status_options() );
		$settings['currency']      = self::get_currency_settings();
		$settings['locale']        = [
			'siteLocale'    => isset( $settings['siteLocale'] )
				? $settings['siteLocale']
				: get_locale(),
			'userLocale'    => isset( $settings['l10n']['userLocale'] )
				? $settings['l10n']['userLocale']
				: get_user_locale(),
			'weekdaysShort' => isset( $settings['l10n']['weekdaysShort'] )
				? $settings['l10n']['weekdaysShort']
				: array_values( $wp_locale->weekday_abbrev ),
		];
	}

	$preload_data_endpoints = apply_filters( 'woocommerce_component_settings_preload_endpoints', array() );
	$preload_data_endpoints['jetpackStatus'] = '/jetpack/v4/connection';
	if ( ! empty( $preload_data_endpoints ) ) {
		$preload_data = array_reduce(
			array_values( $preload_data_endpoints ),
			'rest_preload_api_request'
		);
	}

	$preload_options = apply_filters( 'woocommerce_admin_preload_options', array() );
	if ( ! empty( $preload_options ) ) {
		foreach ( $preload_options as $option ) {
			$settings['preloadOptions'][ $option ] = get_option( $option );
		}
	}

	$preload_settings = apply_filters( 'woocommerce_admin_preload_settings', array() );
	if ( ! empty( $preload_settings ) ) {
		$setting_options = new \WC_REST_Setting_Options_V2_Controller();
		foreach ( $preload_settings as $group ) {
			$group_settings   = $setting_options->get_group_settings( $group );
			$preload_settings = [];
			foreach ( $group_settings as $option ) {
				if ( array_key_exists( 'id', $option ) && array_key_exists( 'value', $option ) ) {
					$preload_settings[ $option['id'] ] = $option['value'];
				}
			}
			$settings['preloadSettings'][ $group ] = $preload_settings;
		}
	}

	$user_controller = new \WP_REST_Users_Controller();
	$request         = new \WP_REST_Request();
	$request->set_query_params( array( 'context' => 'edit' ) );
	$user_response     = $user_controller->get_current_item( $request );
	$current_user_data = is_wp_error( $user_response ) ? (object) array() : $user_response->get_data();

	$settings['currentUserData']      = $current_user_data;
	$settings['reviewsEnabled']       = get_option( 'woocommerce_enable_reviews' );
	$settings['manageStock']          = get_option( 'woocommerce_manage_stock' );
	$settings['commentModeration']    = get_option( 'comment_moderation' );
	$settings['notifyLowStockAmount'] = get_option( 'woocommerce_notify_low_stock_amount' );
	// @todo On merge, once plugin images are added to core WooCommerce, `wcAdminAssetUrl` can be retired,
	// and `wcAssetUrl` can be used in its place throughout the codebase.
	$settings['wcAdminAssetUrl'] = WC_ADMIN_IMAGES_FOLDER_URL;
	$settings['wcVersion']       = WC_VERSION;
	$settings['siteUrl']         = site_url();
	$settings['shopUrl']         = get_permalink( wc_get_page_id( 'shop' ) );
	$settings['homeUrl']         = home_url();
	$settings['dateFormat']      = get_option( 'date_format' );
	$settings['timeZone']        = wc_timezone_string();
	$settings['plugins']         = array(
		'installedPlugins' => PluginsHelper::get_installed_plugin_slugs(),
		'activePlugins'    => Plugins::get_active_plugins(),
	);
	// Plugins that depend on changing the translation work on the server but not the client -
	// WooCommerce Branding is an example of this - so pass through the translation of
	// 'WooCommerce' to wcSettings.
	$settings['woocommerceTranslation'] = __( 'WooCommerce', 'woocommerce' );
	// We may have synced orders with a now-unregistered status.
	// E.g An extension that added statuses is now inactive or removed.
	$settings['unregisteredOrderStatuses'] = self::get_unregistered_order_statuses();
	// The separator used for attributes found in Variation titles.
	$settings['variationTitleAttributesSeparator'] = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', new \WC_Product() );

	if ( ! empty( $preload_data_endpoints ) ) {
		$settings['dataEndpoints'] = isset( $settings['dataEndpoints'] )
			? $settings['dataEndpoints']
			: [];
		foreach ( $preload_data_endpoints as $key => $endpoint ) {
			// Handle error case: rest_do_request() doesn't guarantee success.
			if ( empty( $preload_data[ $endpoint ] ) ) {
				$settings['dataEndpoints'][ $key ] = array();
			} else {
				$settings['dataEndpoints'][ $key ] = $preload_data[ $endpoint ]['body'];
			}
		}
	}
	$settings = self::get_custom_settings( $settings );
	if ( PageController::is_embed_page() ) {
		$settings['embedBreadcrumbs'] = self::get_embed_breadcrumbs();
	}

	$settings['allowMarketplaceSuggestions']      = WC_Marketplace_Suggestions::allow_suggestions();
	$settings['connectNonce']                     = wp_create_nonce( 'connect' );
	$settings['wcpay_welcome_page_connect_nonce'] = wp_create_nonce( 'wcpay-connect' );

	return $settings;
}