Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/Internal/Admin
File: Loader.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Register the scripts, styles, and includes needed for pieces of the WooCommerce Admin experience.
[2] Fix | Delete
*/
[3] Fix | Delete
[4] Fix | Delete
namespace Automattic\WooCommerce\Internal\Admin;
[5] Fix | Delete
[6] Fix | Delete
use Automattic\WooCommerce\Admin\API\Reports\Orders\DataStore as OrdersDataStore;
[7] Fix | Delete
use Automattic\WooCommerce\Admin\Features\Features;
[8] Fix | Delete
use Automattic\WooCommerce\Admin\PageController;
[9] Fix | Delete
use Automattic\WooCommerce\Admin\PluginsHelper;
[10] Fix | Delete
use Automattic\WooCommerce\Internal\Admin\ProductReviews\Reviews;
[11] Fix | Delete
use Automattic\WooCommerce\Internal\Admin\ProductReviews\ReviewsCommentsOverrides;
[12] Fix | Delete
[13] Fix | Delete
/**
[14] Fix | Delete
* Loader Class.
[15] Fix | Delete
*/
[16] Fix | Delete
class Loader {
[17] Fix | Delete
/**
[18] Fix | Delete
* Class instance.
[19] Fix | Delete
*
[20] Fix | Delete
* @var Loader instance
[21] Fix | Delete
*/
[22] Fix | Delete
protected static $instance = null;
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* An array of classes to load from the includes folder.
[26] Fix | Delete
*
[27] Fix | Delete
* @var array
[28] Fix | Delete
*/
[29] Fix | Delete
protected static $classes = array();
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* WordPress capability required to use analytics features.
[33] Fix | Delete
*
[34] Fix | Delete
* @var string
[35] Fix | Delete
*/
[36] Fix | Delete
protected static $required_capability = null;
[37] Fix | Delete
[38] Fix | Delete
/**
[39] Fix | Delete
* An array of dependencies that have been preloaded (to avoid duplicates).
[40] Fix | Delete
*
[41] Fix | Delete
* @var array
[42] Fix | Delete
*/
[43] Fix | Delete
protected $preloaded_dependencies = array(
[44] Fix | Delete
'script' => array(),
[45] Fix | Delete
'style' => array(),
[46] Fix | Delete
);
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Get class instance.
[50] Fix | Delete
*/
[51] Fix | Delete
public static function get_instance() {
[52] Fix | Delete
if ( ! self::$instance ) {
[53] Fix | Delete
self::$instance = new self();
[54] Fix | Delete
}
[55] Fix | Delete
return self::$instance;
[56] Fix | Delete
}
[57] Fix | Delete
[58] Fix | Delete
/**
[59] Fix | Delete
* Constructor.
[60] Fix | Delete
* Hooks added here should be removed in `wc_admin_initialize` via the feature plugin.
[61] Fix | Delete
*/
[62] Fix | Delete
public function __construct() {
[63] Fix | Delete
Features::get_instance();
[64] Fix | Delete
WCAdminSharedSettings::get_instance();
[65] Fix | Delete
Translations::get_instance();
[66] Fix | Delete
WCAdminUser::get_instance();
[67] Fix | Delete
Settings::get_instance();
[68] Fix | Delete
SiteHealth::get_instance();
[69] Fix | Delete
SystemStatusReport::get_instance();
[70] Fix | Delete
[71] Fix | Delete
wc_get_container()->get( Reviews::class );
[72] Fix | Delete
wc_get_container()->get( ReviewsCommentsOverrides::class );
[73] Fix | Delete
[74] Fix | Delete
add_filter( 'admin_body_class', array( __CLASS__, 'add_admin_body_classes' ) );
[75] Fix | Delete
add_filter( 'admin_title', array( __CLASS__, 'update_admin_title' ) );
[76] Fix | Delete
add_action( 'in_admin_header', array( __CLASS__, 'embed_page_header' ) );
[77] Fix | Delete
add_action( 'admin_head', array( __CLASS__, 'remove_notices' ) );
[78] Fix | Delete
add_action( 'admin_head', array( __CLASS__, 'smart_app_banner' ) );
[79] Fix | Delete
add_action( 'admin_notices', array( __CLASS__, 'inject_before_notices' ), -9999 );
[80] Fix | Delete
add_action( 'admin_notices', array( __CLASS__, 'inject_after_notices' ), PHP_INT_MAX );
[81] Fix | Delete
[82] Fix | Delete
// Added this hook to delete the field woocommerce_onboarding_homepage_post_id when deleting the homepage.
[83] Fix | Delete
add_action( 'trashed_post', array( __CLASS__, 'delete_homepage' ) );
[84] Fix | Delete
[85] Fix | Delete
/*
[86] Fix | Delete
* Remove the emoji script as it always defaults to replacing emojis with Twemoji images.
[87] Fix | Delete
* Gutenberg has also disabled emojis. More on that here -> https://github.com/WordPress/gutenberg/pull/6151
[88] Fix | Delete
*/
[89] Fix | Delete
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
[90] Fix | Delete
[91] Fix | Delete
add_action( 'load-themes.php', array( __CLASS__, 'add_appearance_theme_view_tracks_event' ) );
[92] Fix | Delete
}
[93] Fix | Delete
[94] Fix | Delete
/**
[95] Fix | Delete
* Returns breadcrumbs for the current page.
[96] Fix | Delete
*/
[97] Fix | Delete
private static function get_embed_breadcrumbs() {
[98] Fix | Delete
return wc_admin_get_breadcrumbs();
[99] Fix | Delete
}
[100] Fix | Delete
[101] Fix | Delete
/**
[102] Fix | Delete
* Outputs breadcrumbs via PHP for the initial load of an embedded page.
[103] Fix | Delete
*
[104] Fix | Delete
* @param array $section Section to create breadcrumb from.
[105] Fix | Delete
*/
[106] Fix | Delete
private static function output_heading( $section ) {
[107] Fix | Delete
echo esc_html( $section );
[108] Fix | Delete
}
[109] Fix | Delete
[110] Fix | Delete
/**
[111] Fix | Delete
* Set up a div for the header embed to render into.
[112] Fix | Delete
* The initial contents here are meant as a place loader for when the PHP page initially loads.
[113] Fix | Delete
*/
[114] Fix | Delete
public static function embed_page_header() {
[115] Fix | Delete
if ( ! PageController::is_admin_page() && ! PageController::is_embed_page() ) {
[116] Fix | Delete
return;
[117] Fix | Delete
}
[118] Fix | Delete
[119] Fix | Delete
if ( ! PageController::is_embed_page() ) {
[120] Fix | Delete
return;
[121] Fix | Delete
}
[122] Fix | Delete
[123] Fix | Delete
if ( PageController::is_modern_settings_page() ) {
[124] Fix | Delete
return;
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
$sections = self::get_embed_breadcrumbs();
[128] Fix | Delete
$sections = is_array( $sections ) ? $sections : array( $sections );
[129] Fix | Delete
[130] Fix | Delete
$page_title = '';
[131] Fix | Delete
$pages_with_tabs = array(
[132] Fix | Delete
'admin.php?page=wc-settings',
[133] Fix | Delete
'admin.php?page=wc-reports',
[134] Fix | Delete
'admin.php?page=wc-status',
[135] Fix | Delete
);
[136] Fix | Delete
[137] Fix | Delete
if (
[138] Fix | Delete
count( $sections ) > 2 &&
[139] Fix | Delete
is_array( $sections[1] ) &&
[140] Fix | Delete
in_array( $sections[1][0], $pages_with_tabs, true )
[141] Fix | Delete
) {
[142] Fix | Delete
$page_title = $sections[1][1];
[143] Fix | Delete
} else {
[144] Fix | Delete
$page_title = end( $sections );
[145] Fix | Delete
}
[146] Fix | Delete
?>
[147] Fix | Delete
<div id="woocommerce-embedded-root" class="is-embed-loading">
[148] Fix | Delete
<div class="woocommerce-layout">
[149] Fix | Delete
<div class="woocommerce-layout__header is-embed-loading">
[150] Fix | Delete
<h1 class="woocommerce-layout__header-heading">
[151] Fix | Delete
<?php self::output_heading( $page_title ); ?>
[152] Fix | Delete
</h1>
[153] Fix | Delete
</div>
[154] Fix | Delete
</div>
[155] Fix | Delete
</div>
[156] Fix | Delete
<?php
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
/**
[160] Fix | Delete
* Adds body classes to the main wp-admin wrapper, allowing us to better target elements in specific scenarios.
[161] Fix | Delete
*
[162] Fix | Delete
* @param string $admin_body_class Body class to add.
[163] Fix | Delete
*/
[164] Fix | Delete
public static function add_admin_body_classes( $admin_body_class = '' ) {
[165] Fix | Delete
if ( ! PageController::is_admin_or_embed_page() || PageController::is_modern_settings_page() ) {
[166] Fix | Delete
return $admin_body_class;
[167] Fix | Delete
}
[168] Fix | Delete
[169] Fix | Delete
$classes = explode( ' ', trim( $admin_body_class ) );
[170] Fix | Delete
$classes[] = 'woocommerce-admin-page';
[171] Fix | Delete
if ( PageController::is_embed_page() ) {
[172] Fix | Delete
$classes[] = 'woocommerce-embed-page';
[173] Fix | Delete
}
[174] Fix | Delete
[175] Fix | Delete
// Add page ID as a class.
[176] Fix | Delete
$page_id = PageController::get_instance()->get_current_screen_id();
[177] Fix | Delete
if ( $page_id ) {
[178] Fix | Delete
$classes[] = $page_id;
[179] Fix | Delete
}
[180] Fix | Delete
[181] Fix | Delete
/**
[182] Fix | Delete
* Some routes or features like onboarding hide the wp-admin navigation and masterbar.
[183] Fix | Delete
* Setting `woocommerce_admin_is_loading` to true allows us to premeptively hide these
[184] Fix | Delete
* elements while the JS app loads.
[185] Fix | Delete
* This class needs to be removed by those feature components (like <ProfileWizard />).
[186] Fix | Delete
*
[187] Fix | Delete
* @param bool $is_loading If WooCommerce Admin is loading a fullscreen view.
[188] Fix | Delete
* @since 6.5.0
[189] Fix | Delete
*/
[190] Fix | Delete
$is_loading = apply_filters( 'woocommerce_admin_is_loading', false );
[191] Fix | Delete
[192] Fix | Delete
if ( PageController::is_admin_page() && $is_loading ) {
[193] Fix | Delete
$classes[] = 'woocommerce-admin-is-loading';
[194] Fix | Delete
}
[195] Fix | Delete
[196] Fix | Delete
$admin_body_class = implode( ' ', array_unique( $classes ) );
[197] Fix | Delete
return " $admin_body_class ";
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
/**
[201] Fix | Delete
* Adds an iOS "Smart App Banner" for display on iOS Safari.
[202] Fix | Delete
* See https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html
[203] Fix | Delete
*/
[204] Fix | Delete
public static function smart_app_banner() {
[205] Fix | Delete
$exclude_paths = array(
[206] Fix | Delete
'/customize-store',
[207] Fix | Delete
'/setup-wizard',
[208] Fix | Delete
'/launch-your-store',
[209] Fix | Delete
);
[210] Fix | Delete
[211] Fix | Delete
/* phpcs:ignore */
[212] Fix | Delete
$path = $_GET['path'] ?? '';
[213] Fix | Delete
[214] Fix | Delete
if ( PageController::is_admin_or_embed_page() && ! in_array( $path, $exclude_paths, true ) ) {
[215] Fix | Delete
echo "
[216] Fix | Delete
<meta name='apple-itunes-app' content='app-id=1389130815'>
[217] Fix | Delete
";
[218] Fix | Delete
}
[219] Fix | Delete
}
[220] Fix | Delete
[221] Fix | Delete
[222] Fix | Delete
/**
[223] Fix | Delete
* Removes notices that should not be displayed on WC Admin pages.
[224] Fix | Delete
*/
[225] Fix | Delete
public static function remove_notices() {
[226] Fix | Delete
if ( ! PageController::is_admin_or_embed_page() ) {
[227] Fix | Delete
return;
[228] Fix | Delete
}
[229] Fix | Delete
[230] Fix | Delete
// Hello Dolly.
[231] Fix | Delete
if ( function_exists( 'hello_dolly' ) ) {
[232] Fix | Delete
remove_action( 'admin_notices', 'hello_dolly' );
[233] Fix | Delete
}
[234] Fix | Delete
}
[235] Fix | Delete
[236] Fix | Delete
/**
[237] Fix | Delete
* Runs before admin notices action and hides them.
[238] Fix | Delete
*/
[239] Fix | Delete
public static function inject_before_notices() {
[240] Fix | Delete
if ( ! PageController::is_admin_or_embed_page() ) {
[241] Fix | Delete
return;
[242] Fix | Delete
}
[243] Fix | Delete
[244] Fix | Delete
// The JITMs won't be shown in the Onboarding Wizard.
[245] Fix | Delete
$is_onboarding = isset( $_GET['path'] ) && '/setup-wizard' === wc_clean( wp_unslash( $_GET['path'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
[246] Fix | Delete
$maybe_hide_jitm = $is_onboarding ? '-hide' : '';
[247] Fix | Delete
[248] Fix | Delete
echo '<div class="woocommerce-layout__jitm' . sanitize_html_class( $maybe_hide_jitm ) . '" id="jp-admin-notices"></div>';
[249] Fix | Delete
[250] Fix | Delete
// Wrap the notices in a hidden div to prevent flickering before
[251] Fix | Delete
// they are moved elsewhere in the page by WordPress Core.
[252] Fix | Delete
echo '<div class="woocommerce-layout__notice-list-hide" id="wp__notice-list">';
[253] Fix | Delete
[254] Fix | Delete
if ( PageController::is_admin_page() ) {
[255] Fix | Delete
// Capture all notices and hide them. WordPress Core looks for
[256] Fix | Delete
// `.wp-header-end` and appends notices after it if found.
[257] Fix | Delete
// https://github.com/WordPress/WordPress/blob/f6a37e7d39e2534d05b9e542045174498edfe536/wp-admin/js/common.js#L737 .
[258] Fix | Delete
echo '<div class="wp-header-end" id="woocommerce-layout__notice-catcher"></div>';
[259] Fix | Delete
}
[260] Fix | Delete
}
[261] Fix | Delete
[262] Fix | Delete
/**
[263] Fix | Delete
* Runs after admin notices and closes div.
[264] Fix | Delete
*/
[265] Fix | Delete
public static function inject_after_notices() {
[266] Fix | Delete
if ( ! PageController::is_admin_or_embed_page() ) {
[267] Fix | Delete
return;
[268] Fix | Delete
}
[269] Fix | Delete
[270] Fix | Delete
// Close the hidden div used to prevent notices from flickering before
[271] Fix | Delete
// they are inserted elsewhere in the page.
[272] Fix | Delete
echo '</div>';
[273] Fix | Delete
}
[274] Fix | Delete
[275] Fix | Delete
/**
[276] Fix | Delete
* Edits Admin title based on section of wc-admin.
[277] Fix | Delete
*
[278] Fix | Delete
* @param string $admin_title Modifies admin title.
[279] Fix | Delete
* @todo Can we do some URL rewriting so we can figure out which page they are on server side?
[280] Fix | Delete
*/
[281] Fix | Delete
public static function update_admin_title( $admin_title ) {
[282] Fix | Delete
if (
[283] Fix | Delete
! did_action( 'current_screen' ) ||
[284] Fix | Delete
! PageController::is_admin_page()
[285] Fix | Delete
) {
[286] Fix | Delete
return $admin_title;
[287] Fix | Delete
}
[288] Fix | Delete
[289] Fix | Delete
$sections = self::get_embed_breadcrumbs();
[290] Fix | Delete
$pieces = array();
[291] Fix | Delete
[292] Fix | Delete
foreach ( $sections as $section ) {
[293] Fix | Delete
$pieces[] = is_array( $section ) ? $section[1] : $section;
[294] Fix | Delete
}
[295] Fix | Delete
[296] Fix | Delete
$pieces = array_reverse( $pieces );
[297] Fix | Delete
$title = implode( ' &lsaquo; ', $pieces );
[298] Fix | Delete
[299] Fix | Delete
/* translators: %1$s: updated title, %2$s: blog info name */
[300] Fix | Delete
return sprintf( __( '%1$s &lsaquo; %2$s', 'woocommerce' ), $title, get_bloginfo( 'name' ) );
[301] Fix | Delete
}
[302] Fix | Delete
[303] Fix | Delete
/**
[304] Fix | Delete
* Set up a div for the app to render into.
[305] Fix | Delete
*/
[306] Fix | Delete
public static function page_wrapper() {
[307] Fix | Delete
?>
[308] Fix | Delete
<div class="wrap">
[309] Fix | Delete
<div id="root"></div>
[310] Fix | Delete
</div>
[311] Fix | Delete
<?php
[312] Fix | Delete
}
[313] Fix | Delete
[314] Fix | Delete
/**
[315] Fix | Delete
* Hooks extra necessary data into the component settings array already set in WooCommerce core.
[316] Fix | Delete
*
[317] Fix | Delete
* @param array $settings Array of component settings.
[318] Fix | Delete
* @return array Array of component settings.
[319] Fix | Delete
*/
[320] Fix | Delete
public static function add_component_settings( $settings ) {
[321] Fix | Delete
if ( ! is_admin() ) {
[322] Fix | Delete
return $settings;
[323] Fix | Delete
}
[324] Fix | Delete
[325] Fix | Delete
if ( ! function_exists( 'wc_blocks_container' ) ) {
[326] Fix | Delete
global $wp_locale;
[327] Fix | Delete
// inject data not available via older versions of wc_blocks/woo.
[328] Fix | Delete
$settings['orderStatuses'] = Settings::get_order_statuses( wc_get_order_statuses() );
[329] Fix | Delete
$settings['stockStatuses'] = Settings::get_order_statuses( wc_get_product_stock_status_options() );
[330] Fix | Delete
$settings['currency'] = Settings::get_currency_settings();
[331] Fix | Delete
$settings['locale'] = array(
[332] Fix | Delete
'siteLocale' => isset( $settings['siteLocale'] )
[333] Fix | Delete
? $settings['siteLocale']
[334] Fix | Delete
: get_locale(),
[335] Fix | Delete
'userLocale' => isset( $settings['l10n']['userLocale'] )
[336] Fix | Delete
? $settings['l10n']['userLocale']
[337] Fix | Delete
: get_user_locale(),
[338] Fix | Delete
'weekdaysShort' => isset( $settings['l10n']['weekdaysShort'] )
[339] Fix | Delete
? $settings['l10n']['weekdaysShort']
[340] Fix | Delete
: array_values( $wp_locale->weekday_abbrev ),
[341] Fix | Delete
);
[342] Fix | Delete
}
[343] Fix | Delete
[344] Fix | Delete
/**
[345] Fix | Delete
* The woocommerce_component_settings_preload_endpoints filter
[346] Fix | Delete
*
[347] Fix | Delete
* @since 6.5.0
[348] Fix | Delete
*/
[349] Fix | Delete
$preload_data_endpoints = apply_filters( 'woocommerce_component_settings_preload_endpoints', array() );
[350] Fix | Delete
[351] Fix | Delete
$preload_data_endpoints['jetpackStatus'] = '/jetpack/v4/connection';
[352] Fix | Delete
if ( ! empty( $preload_data_endpoints ) ) {
[353] Fix | Delete
$preload_data = array_reduce(
[354] Fix | Delete
array_values( $preload_data_endpoints ),
[355] Fix | Delete
'rest_preload_api_request'
[356] Fix | Delete
);
[357] Fix | Delete
}
[358] Fix | Delete
[359] Fix | Delete
/**
[360] Fix | Delete
* The woocommerce_admin_preload_options filter
[361] Fix | Delete
*
[362] Fix | Delete
* @since 6.5.0
[363] Fix | Delete
*/
[364] Fix | Delete
$preload_options = apply_filters( 'woocommerce_admin_preload_options', array() );
[365] Fix | Delete
if ( ! empty( $preload_options ) ) {
[366] Fix | Delete
foreach ( $preload_options as $option ) {
[367] Fix | Delete
$settings['preloadOptions'][ $option ] = get_option( $option );
[368] Fix | Delete
}
[369] Fix | Delete
}
[370] Fix | Delete
[371] Fix | Delete
/**
[372] Fix | Delete
* The woocommerce_admin_preload_settings filter
[373] Fix | Delete
*
[374] Fix | Delete
* @since 6.5.0
[375] Fix | Delete
*/
[376] Fix | Delete
$preload_settings = apply_filters( 'woocommerce_admin_preload_settings', array() );
[377] Fix | Delete
if ( ! empty( $preload_settings ) ) {
[378] Fix | Delete
$setting_options = new \WC_REST_Setting_Options_V2_Controller();
[379] Fix | Delete
foreach ( $preload_settings as $group ) {
[380] Fix | Delete
$group_settings = $setting_options->get_group_settings( $group );
[381] Fix | Delete
$preload_settings = array();
[382] Fix | Delete
foreach ( $group_settings as $option ) {
[383] Fix | Delete
if ( array_key_exists( 'id', $option ) && array_key_exists( 'value', $option ) ) {
[384] Fix | Delete
$preload_settings[ $option['id'] ] = $option['value'];
[385] Fix | Delete
}
[386] Fix | Delete
}
[387] Fix | Delete
$settings['preloadSettings'][ $group ] = $preload_settings;
[388] Fix | Delete
}
[389] Fix | Delete
}
[390] Fix | Delete
[391] Fix | Delete
$user_controller = new \WP_REST_Users_Controller();
[392] Fix | Delete
$request = new \WP_REST_Request();
[393] Fix | Delete
$request->set_query_params( array( 'context' => 'edit' ) );
[394] Fix | Delete
$user_response = $user_controller->get_current_item( $request );
[395] Fix | Delete
$current_user_data = is_wp_error( $user_response ) ? (object) array() : $user_response->get_data();
[396] Fix | Delete
[397] Fix | Delete
$settings['currentUserData'] = $current_user_data;
[398] Fix | Delete
$settings['reviewsEnabled'] = get_option( 'woocommerce_enable_reviews' );
[399] Fix | Delete
$settings['manageStock'] = get_option( 'woocommerce_manage_stock' );
[400] Fix | Delete
$settings['commentModeration'] = get_option( 'comment_moderation' );
[401] Fix | Delete
$settings['notifyLowStockAmount'] = get_option( 'woocommerce_notify_low_stock_amount' );
[402] Fix | Delete
// @todo On merge, once plugin images are added to core WooCommerce, `wcAdminAssetUrl` can be retired,
[403] Fix | Delete
// and `wcAssetUrl` can be used in its place throughout the codebase.
[404] Fix | Delete
$settings['wcAdminAssetUrl'] = WC_ADMIN_IMAGES_FOLDER_URL;
[405] Fix | Delete
$settings['wcVersion'] = WC_VERSION;
[406] Fix | Delete
$settings['siteUrl'] = site_url();
[407] Fix | Delete
$settings['shopUrl'] = get_permalink( wc_get_page_id( 'shop' ) );
[408] Fix | Delete
$settings['homeUrl'] = home_url();
[409] Fix | Delete
$settings['dateFormat'] = get_option( 'date_format' );
[410] Fix | Delete
$settings['timeZone'] = wc_timezone_string();
[411] Fix | Delete
$settings['plugins'] = array(
[412] Fix | Delete
'installedPlugins' => PluginsHelper::get_installed_plugin_slugs(),
[413] Fix | Delete
'activePlugins' => Plugins::get_active_plugins(),
[414] Fix | Delete
);
[415] Fix | Delete
// Plugins that depend on changing the translation work on the server but not the client -
[416] Fix | Delete
// WooCommerce Branding is an example of this - so pass through the translation of
[417] Fix | Delete
// 'WooCommerce' to wcSettings.
[418] Fix | Delete
$settings['woocommerceTranslation'] = __( 'WooCommerce', 'woocommerce' );
[419] Fix | Delete
// We may have synced orders with a now-unregistered status.
[420] Fix | Delete
// E.g An extension that added statuses is now inactive or removed.
[421] Fix | Delete
$settings['unregisteredOrderStatuses'] = self::get_unregistered_order_statuses();
[422] Fix | Delete
// The separator used for attributes found in Variation titles.
[423] Fix | Delete
/* phpcs:ignore */
[424] Fix | Delete
$settings['variationTitleAttributesSeparator'] = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', new \WC_Product() );
[425] Fix | Delete
[426] Fix | Delete
if ( ! empty( $preload_data_endpoints ) ) {
[427] Fix | Delete
$settings['dataEndpoints'] = isset( $settings['dataEndpoints'] )
[428] Fix | Delete
? $settings['dataEndpoints']
[429] Fix | Delete
: array();
[430] Fix | Delete
foreach ( $preload_data_endpoints as $key => $endpoint ) {
[431] Fix | Delete
// Handle error case: rest_do_request() doesn't guarantee success.
[432] Fix | Delete
if ( empty( $preload_data[ $endpoint ] ) ) {
[433] Fix | Delete
$settings['dataEndpoints'][ $key ] = array();
[434] Fix | Delete
} else {
[435] Fix | Delete
$settings['dataEndpoints'][ $key ] = $preload_data[ $endpoint ]['body'];
[436] Fix | Delete
}
[437] Fix | Delete
}
[438] Fix | Delete
}
[439] Fix | Delete
$settings = self::get_custom_settings( $settings );
[440] Fix | Delete
if ( PageController::is_embed_page() ) {
[441] Fix | Delete
$settings['embedBreadcrumbs'] = self::get_embed_breadcrumbs();
[442] Fix | Delete
}
[443] Fix | Delete
[444] Fix | Delete
$settings['allowMarketplaceSuggestions'] = WC_Marketplace_Suggestions::allow_suggestions();
[445] Fix | Delete
$settings['connectNonce'] = wp_create_nonce( 'connect' );
[446] Fix | Delete
$settings['wcpay_welcome_page_connect_nonce'] = wp_create_nonce( 'wcpay-connect' );
[447] Fix | Delete
[448] Fix | Delete
return $settings;
[449] Fix | Delete
}
[450] Fix | Delete
[451] Fix | Delete
/**
[452] Fix | Delete
* Format order statuses by removing a leading 'wc-' if present.
[453] Fix | Delete
*
[454] Fix | Delete
* @param array $statuses Order statuses.
[455] Fix | Delete
* @return array formatted statuses.
[456] Fix | Delete
*
[457] Fix | Delete
* @deprecated migrate to \Automattic\WooCommerce\Internal\Admin\Settings instead.
[458] Fix | Delete
*/
[459] Fix | Delete
public static function get_order_statuses( $statuses ) {
[460] Fix | Delete
wc_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '9.9.0', '\Automattic\WooCommerce\Internal\Admin\Settings::get_order_statuses' );
[461] Fix | Delete
[462] Fix | Delete
return Settings::get_order_statuses( $statuses );
[463] Fix | Delete
}
[464] Fix | Delete
[465] Fix | Delete
/**
[466] Fix | Delete
* Get all order statuses present in analytics tables that aren't registered.
[467] Fix | Delete
*
[468] Fix | Delete
* @return array Unregistered order statuses.
[469] Fix | Delete
*
[470] Fix | Delete
* @deprecated migrate to \Automattic\WooCommerce\Internal\Admin\Settings instead.
[471] Fix | Delete
*/
[472] Fix | Delete
public static function get_unregistered_order_statuses() {
[473] Fix | Delete
wc_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '9.9.0' );
[474] Fix | Delete
[475] Fix | Delete
$registered_statuses = wc_get_order_statuses();
[476] Fix | Delete
$all_synced_statuses = OrdersDataStore::get_all_statuses();
[477] Fix | Delete
$unregistered_statuses = array_diff( $all_synced_statuses, array_keys( $registered_statuses ) );
[478] Fix | Delete
$formatted_status_keys = Settings::get_order_statuses( array_fill_keys( $unregistered_statuses, '' ) );
[479] Fix | Delete
$formatted_statuses = array_keys( $formatted_status_keys );
[480] Fix | Delete
[481] Fix | Delete
return array_combine( $formatted_statuses, $formatted_statuses );
[482] Fix | Delete
}
[483] Fix | Delete
[484] Fix | Delete
/**
[485] Fix | Delete
* Register the admin settings for use in the WC REST API
[486] Fix | Delete
*
[487] Fix | Delete
* @param array $groups Array of setting groups.
[488] Fix | Delete
* @return array
[489] Fix | Delete
*
[490] Fix | Delete
* @deprecated migrate to \Automattic\WooCommerce\Internal\Admin\Settings instead.
[491] Fix | Delete
*/
[492] Fix | Delete
public static function add_settings_group( $groups ) {
[493] Fix | Delete
wc_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '9.9.0', '\Automattic\WooCommerce\Internal\Admin\Settings::add_settings_group' );
[494] Fix | Delete
[495] Fix | Delete
return Settings::get_instance()->add_settings_group( $groups );
[496] Fix | Delete
}
[497] Fix | Delete
[498] Fix | Delete
/**
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function