<?php defined('ABSPATH') || exit; use Automattic\WooCommerce\Internal\AssignDefaultCategory; use Automattic\WooCommerce\Internal\DownloadPermissionsAdjuster; use Automattic\WooCommerce\Internal\ProductAttributesLookup\DataRegenerator; use Automattic\WooCommerce\Internal\ProductAttributesLookup\LookupDataStore; use Automattic\WooCommerce\Internal\RestockRefundedItemsAdjuster; use Automattic\WooCommerce\Proxies\LegacyProxy; final class WooCommerce { public $version = '5.8.1'; public $db_version = '430'; protected static $_instance = null; public $session = null; public $query = null; public $product_factory = null; public $countries = null; public $integrations = null; public $cart = null; public $customer = null; public $order_factory = null; public $structured_data = null; public $deprecated_hook_handlers = array(); public static function instance() { if (is_null(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; } public function __clone() { wc_doing_it_wrong(__FUNCTION__, __('Cloning is forbidden.', 'woocommerce'), '2.1'); } public function __wakeup() { wc_doing_it_wrong(__FUNCTION__, __('Unserializing instances of this class is forbidden.', 'woocommerce'), '2.1'); } public function __get($key) { if (in_array($key, array('payment_gateways', 'shipping', 'mailer', 'checkout'), true)) { return $this->{$key}(); } } public function __construct() { $this->define_constants(); $this->define_tables(); $this->includes(); $this->init_hooks(); } public function on_plugins_loaded() { do_action('woocommerce_loaded'); } private function init_hooks() { register_activation_hook(WC_PLUGIN_FILE, array('WC_Install', 'install')); register_shutdown_function(array($this, 'log_errors')); add_action('plugins_loaded', array($this, 'on_plugins_loaded'), -1); add_action('admin_notices', array($this, 'build_dependencies_notice')); add_action('after_setup_theme', array($this, 'setup_environment')); add_action('after_setup_theme', array($this, 'include_template_functions'), 11); add_action('init', array($this, 'init'), 0); add_action('init', array('WC_Shortcodes', 'init')); add_action('init', array('WC_Emails', 'init_transactional_emails')); add_action('init', array($this, 'add_image_sizes')); add_action('init', array($this, 'load_rest_api')); add_action('switch_blog', array($this, 'wpdb_table_fix'), 0); add_action('activated_plugin', array($this, 'activated_plugin')); add_action('deactivated_plugin', array($this, 'deactivated_plugin')); add_action('woocommerce_installed', array($this, 'add_woocommerce_inbox_variant')); add_action('woocommerce_updated', array($this, 'add_woocommerce_inbox_variant')); wc_get_container()->get(DownloadPermissionsAdjuster::class); wc_get_container()->get(AssignDefaultCategory::class); wc_get_container()->get(DataRegenerator::class); wc_get_container()->get(LookupDataStore::class); wc_get_container()->get(RestockRefundedItemsAdjuster::class); } public function add_woocommerce_inbox_variant() { $config_name = 'woocommerce_inbox_variant_assignment'; if (false === get_option($config_name, false)) { update_option($config_name, wp_rand(1, 12)); } } public function log_errors() { $error = error_get_last(); if ($error && in_array($error['type'], array(E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR), true)) { $logger = wc_get_logger(); $logger->critical(sprintf(__('%1$s in %2$s on line %3$s', 'woocommerce'), $error['message'], $error['file'], $error['line']) . PHP_EOL, array('source' => 'fatal-errors')); do_action('woocommerce_shutdown_error', $error); } } private function define_constants() { $upload_dir = wp_upload_dir(null, false); $this->define('WC_ABSPATH', dirname(WC_PLUGIN_FILE) . '/'); $this->define('WC_PLUGIN_BASENAME', plugin_basename(WC_PLUGIN_FILE)); $this->define('WC_VERSION', $this->version); $this->define('WOOCOMMERCE_VERSION', $this->version); $this->define('WC_ROUNDING_PRECISION', 6); $this->define('WC_DISCOUNT_ROUNDING_MODE', 2); $this->define('WC_TAX_ROUNDING_MODE', 'yes' === get_option('woocommerce_prices_include_tax', 'no') ? 2 : 1); $this->define('WC_DELIMITER', '|'); $this->define('WC_LOG_DIR', $upload_dir['basedir'] . '/wc-logs/'); $this->define('WC_SESSION_CACHE_GROUP', 'wc_session_id'); $this->define('WC_TEMPLATE_DEBUG_MODE', false); $this->define('WC_NOTICE_MIN_PHP_VERSION', '7.2'); $this->define('WC_NOTICE_MIN_WP_VERSION', '5.2'); $this->define('WC_PHP_MIN_REQUIREMENTS_NOTICE', 'wp_php_min_requirements_' . WC_NOTICE_MIN_PHP_VERSION . '_' . WC_NOTICE_MIN_WP_VERSION); $this->define('WC_SSR_PLUGIN_UPDATE_RELEASE_VERSION_TYPE', 'none'); } private function define_tables() { global $wpdb; $tables = array('payment_tokenmeta' => 'woocommerce_payment_tokenmeta', 'order_itemmeta' => 'woocommerce_order_itemmeta', 'wc_product_meta_lookup' => 'wc_product_meta_lookup', 'wc_tax_rate_classes' => 'wc_tax_rate_classes', 'wc_reserved_stock' => 'wc_reserved_stock'); foreach ($tables as $name => $table) { $wpdb->{$name} = $wpdb->prefix . $table; $wpdb->tables[] = $table; } } private function define($name, $value) { if (!defined($name)) { define($name, $value); } } public function is_rest_api_request() { if (empty($_SERVER['REQUEST_URI'])) { return false; } $rest_prefix = trailingslashit(rest_get_url_prefix()); $is_rest_api_request = false !== strpos($_SERVER['REQUEST_URI'], $rest_prefix); return apply_filters('woocommerce_is_rest_api_request', $is_rest_api_request); } public function load_rest_api() { \Automattic\WooCommerce\RestApi\Server::instance()->init(); } private function is_request($type) { switch ($type) { case 'admin': return is_admin(); case 'ajax': return defined('DOING_AJAX'); case 'cron': return defined('DOING_CRON'); case 'frontend': return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON') && !$this->is_rest_api_request(); } } public function includes() { include_once WC_ABSPATH . 'includes/class-wc-autoloader.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-abstract-order-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-coupon-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-download-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-customer-download-log-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-object-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-product-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-item-type-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-order-refund-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-payment-token-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-product-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-product-variable-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-shipping-zone-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-logger-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-log-handler-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-webhooks-data-store-interface.php'; include_once WC_ABSPATH . 'includes/interfaces/class-wc-queue-interface.php'; include_once WC_ABSPATH . 'includes/traits/trait-wc-item-totals.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-data.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-object-query.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-payment-token.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-product.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-order.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-settings-api.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-shipping-method.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-payment-gateway.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-integration.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-log-handler.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-deprecated-hooks.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-session.php'; include_once WC_ABSPATH . 'includes/abstracts/abstract-wc-privacy.php'; include_once WC_ABSPATH . 'includes/wc-core-functions.php'; include_once WC_ABSPATH . 'includes/class-wc-datetime.php'; include_once WC_ABSPATH . 'includes/class-wc-post-types.php'; include_once WC_ABSPATH . 'includes/class-wc-install.php'; include_once WC_ABSPATH . 'includes/class-wc-geolocation.php'; include_once WC_ABSPATH . 'includes/class-wc-download-handler.php'; include_once WC_ABSPATH . 'includes/class-wc-comments.php'; include_once WC_ABSPATH . 'includes/class-wc-post-data.php'; include_once WC_ABSPATH . 'includes/class-wc-ajax.php'; include_once WC_ABSPATH . 'includes/class-wc-emails.php'; include_once WC_ABSPATH . 'includes/class-wc-data-exception.php'; include_once WC_ABSPATH . 'includes/class-wc-query.php'; include_once WC_ABSPATH . 'includes/class-wc-meta-data.php'; include_once WC_ABSPATH . 'includes/class-wc-order-factory.php'; include_once WC_ABSPATH . 'includes/class-wc-order-query.php'; include_once WC_ABSPATH . 'includes/class-wc-product-factory.php'; include_once WC_ABSPATH . 'includes/class-wc-product-query.php'; include_once WC_ABSPATH . 'includes/class-wc-payment-tokens.php'; include_once WC_ABSPATH . 'includes/class-wc-shipping-zone.php'; include_once WC_ABSPATH . 'includes/gateways/class-wc-payment-gateway-cc.php'; include_once WC_ABSPATH . 'includes/gateways/class-wc-payment-gateway-echeck.php'; include_once WC_ABSPATH . 'includes/class-wc-countries.php'; include_once WC_ABSPATH . 'includes/class-wc-integrations.php'; include_once WC_ABSPATH . 'includes/class-wc-cache-helper.php'; include_once WC_ABSPATH . 'includes/class-wc-https.php'; include_once WC_ABSPATH . 'includes/class-wc-deprecated-action-hooks.php'; include_once WC_ABSPATH . 'includes/class-wc-deprecated-filter-hooks.php'; include_once WC_ABSPATH . 'includes/class-wc-background-emailer.php'; include_once WC_ABSPATH . 'includes/class-wc-discounts.php'; include_once WC_ABSPATH . 'includes/class-wc-cart-totals.php'; include_once WC_ABSPATH . 'includes/customizer/class-wc-shop-customizer.php'; include_once WC_ABSPATH . 'includes/class-wc-regenerate-images.php'; include_once WC_ABSPATH . 'includes/class-wc-privacy.php'; include_once WC_ABSPATH . 'includes/class-wc-structured-data.php'; include_once WC_ABSPATH . 'includes/class-wc-shortcodes.php'; include_once WC_ABSPATH . 'includes/class-wc-logger.php'; include_once WC_ABSPATH . 'includes/queue/class-wc-action-queue.php'; include_once WC_ABSPATH . 'includes/queue/class-wc-queue.php'; include_once WC_ABSPATH . 'includes/admin/marketplace-suggestions/class-wc-marketplace-updater.php'; include_once WC_ABSPATH . 'includes/blocks/class-wc-blocks-utils.php'; include_once WC_ABSPATH . 'includes/class-wc-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-data-store-wp.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-coupon-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-grouped-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-variable-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-product-variation-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/abstract-wc-order-item-type-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-coupon-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-fee-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-product-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-shipping-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-item-tax-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-payment-token-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-data-store-session.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-download-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-customer-download-log-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-shipping-zone-data-store.php'; include_once WC_ABSPATH . 'includes/data-stores/abstract-wc-order-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-order-refund-data-store-cpt.php'; include_once WC_ABSPATH . 'includes/data-stores/class-wc-webhook-data-store.php'; include_once WC_ABSPATH . 'includes/legacy/class-wc-legacy-api.php'; include_once WC_ABSPATH . 'includes/class-wc-api.php'; include_once WC_ABSPATH . 'includes/class-wc-rest-authentication.php'; include_once WC_ABSPATH . 'includes/class-wc-rest-exception.php'; include_once WC_ABSPATH . 'includes/class-wc-auth.php'; include_once WC_ABSPATH . 'includes/class-wc-register-wp-admin-settings.php'; include_once WC_ABSPATH . 'includes/wccom-site/class-wc-wccom-site.php'; include_once WC_ABSPATH . 'packages/action-scheduler/action-scheduler.php'; if (defined('WP_CLI') && WP_CLI) { include_once WC_ABSPATH . 'includes/class-wc-cli.php'; } if ($this->is_request('admin')) { include_once WC_ABSPATH . 'includes/admin/class-wc-admin.php'; } if ($this->is_request('frontend')) { $this->frontend_includes(); } if ($this->is_request('cron') && 'yes' === get_option('woocommerce_allow_tracking', 'no')) { include_once WC_ABSPATH . 'includes/class-wc-tracker.php'; } $this->theme_support_includes(); $this->query = new WC_Query(); $this->api = new WC_API(); $this->api->init(); } private function theme_support_includes() { if (wc_is_wp_default_theme_active()) { switch (get_template()) { case 'twentyten': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-ten.php'; break; case 'twentyeleven': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-eleven.php'; break; case 'twentytwelve': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twelve.php'; break; case 'twentythirteen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-thirteen.php'; break; case 'twentyfourteen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-fourteen.php'; break; case 'twentyfifteen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-fifteen.php'; break; case 'twentysixteen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-sixteen.php'; break; case 'twentyseventeen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-seventeen.php'; break; case 'twentynineteen': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-nineteen.php'; break; case 'twentytwenty': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twenty.php'; break; case 'twentytwentyone': include_once WC_ABSPATH . 'includes/theme-support/class-wc-twenty-twenty-one.php'; break; } } } public function frontend_includes() { include_once WC_ABSPATH . 'includes/wc-cart-functions.php'; include_once WC_ABSPATH . 'includes/wc-notice-functions.php'; include_once WC_ABSPATH . 'includes/wc-template-hooks.php'; include_once WC_ABSPATH . 'includes/class-wc-template-loader.php'; include_once WC_ABSPATH . 'includes/class-wc-frontend-scripts.php'; include_once WC_ABSPATH . 'includes/class-wc-form-handler.php'; include_once WC_ABSPATH . 'includes/class-wc-cart.php'; include_once WC_ABSPATH . 'includes/class-wc-tax.php'; include_once WC_ABSPATH . 'includes/class-wc-shipping-zones.php'; include_once WC_ABSPATH . 'includes/class-wc-customer.php'; include_once WC_ABSPATH . 'includes/class-wc-embed.php'; include_once WC_ABSPATH . 'includes/class-wc-session-handler.php'; } public function include_template_functions() { include_once WC_ABSPATH . 'includes/wc-template-functions.php'; } public function init() { do_action('before_woocommerce_init'); $this->load_plugin_textdomain(); $this->product_factory = new WC_Product_Factory(); $this->order_factory = new WC_Order_Factory(); $this->countries = new WC_Countries(); $this->integrations = new WC_Integrations(); $this->structured_data = new WC_Structured_Data(); $this->deprecated_hook_handlers['actions'] = new WC_Deprecated_Action_Hooks(); $this->deprecated_hook_handlers['filters'] = new WC_Deprecated_Filter_Hooks(); if ($this->is_request('frontend')) { wc_load_cart(); } $this->load_webhooks(); do_action('woocommerce_init'); } public function load_plugin_textdomain() { $locale = determine_locale(); $locale = apply_filters('plugin_locale', $locale, 'woocommerce'); unload_textdomain('woocommerce'); load_textdomain('woocommerce', WP_LANG_DIR . '/woocommerce/woocommerce-' . $locale . '.mo'); load_plugin_textdomain('woocommerce', false, plugin_basename(dirname(WC_PLUGIN_FILE)) . '/i18n/languages'); } public function setup_environment() { $this->define('WC_TEMPLATE_PATH', $this->template_path()); $this->add_thumbnail_support(); } private function add_thumbnail_support() { if (!current_theme_supports('post-thumbnails')) { add_theme_support('post-thumbnails'); } add_post_type_support('product', 'thumbnail'); } public function add_image_sizes() { $thumbnail = wc_get_image_size('thumbnail'); $single = wc_get_image_size('single'); $gallery_thumbnail = wc_get_image_size('gallery_thumbnail'); add_image_size('woocommerce_thumbnail', $thumbnail['width'], $thumbnail['height'], $thumbnail['crop']); add_image_size('woocommerce_single', $single['width'], $single['height'], $single['crop']); add_image_size('woocommerce_gallery_thumbnail', $gallery_thumbnail['width'], $gallery_thumbnail['height'], $gallery_thumbnail['crop']); add_image_size('shop_catalog', $thumbnail['width'], $thumbnail['height'], $thumbnail['crop']); add_image_size('shop_single', $single['width'], $single['height'], $single['crop']); add_image_size('shop_thumbnail', $gallery_thumbnail['width'], $gallery_thumbnail['height'], $gallery_thumbnail['crop']); } public function plugin_url() { return untrailingslashit(plugins_url('/', WC_PLUGIN_FILE)); } public function plugin_path() { return untrailingslashit(plugin_dir_path(WC_PLUGIN_FILE)); } public function template_path() { return apply_filters('woocommerce_template_path', 'woocommerce/'); } public function ajax_url() { return admin_url('admin-ajax.php', 'relative'); } public function api_request_url($request, $ssl = null) { if (is_null($ssl)) { $scheme = wp_parse_url(home_url(), PHP_URL_SCHEME); } elseif ($ssl) { $scheme = 'https'; } else { $scheme = 'http'; } if (strstr(get_option('permalink_structure'), '/index.php/')) { $api_request_url = trailingslashit(home_url('/index.php/wc-api/' . $request, $scheme)); } elseif (get_option('permalink_structure')) { $api_request_url = trailingslashit(home_url('/wc-api/' . $request, $scheme)); } else { $api_request_url = add_query_arg('wc-api', $request, trailingslashit(home_url('', $scheme))); } return esc_url_raw(apply_filters('woocommerce_api_request_url', $api_request_url, $request, $ssl)); } private function load_webhooks() { if (!is_blog_installed()) { return; } $limit = apply_filters('woocommerce_load_webhooks_limit', null); wc_load_webhooks('active', $limit); } public function initialize_cart() { if (is_null($this->customer) || !$this->customer instanceof WC_Customer) { $this->customer = new WC_Customer(get_current_user_id(), true); add_action('shutdown', array($this->customer, 'save'), 10); } if (is_null($this->cart) || !$this->cart instanceof WC_Cart) { $this->cart = new WC_Cart(); } } public function initialize_session() { $session_class = apply_filters('woocommerce_session_handler', 'WC_Session_Handler'); if (is_null($this->session) || !$this->session instanceof $session_class) { $this->session = new $session_class(); $this->session->init(); } } public function wpdb_table_fix() { $this->define_tables(); } public function activated_plugin($filename) { include_once dirname(__FILE__) . '/admin/helper/class-wc-helper.php'; if ('/woocommerce.php' === substr($filename, -16)) { set_transient('woocommerce_activated_plugin', $filename); } WC_Helper::activated_plugin($filename); } public function deactivated_plugin($filename) { include_once dirname(__FILE__) . '/admin/helper/class-wc-helper.php'; WC_Helper::deactivated_plugin($filename); } public function queue() { return WC_Queue::instance(); } public function checkout() { return WC_Checkout::instance(); } public function payment_gateways() { return WC_Payment_Gateways::instance(); } public function shipping() { return WC_Shipping::instance(); } public function mailer() { return WC_Emails::instance(); } public function build_dependencies_satisfied() { if (!file_exists(WC()->plugin_path() . '/assets/css/admin.css')) { return false; } if (!file_exists(WC()->plugin_path() . '/assets/js/admin/woocommerce_admin.min.js')) { return false; } return true; } public function build_dependencies_notice() { if ($this->build_dependencies_satisfied()) { return; } $message_one = __('You have installed a development version of WooCommerce which requires files to be built and minified. From the plugin directory, run <code>grunt assets</code> to build and minify assets.', 'woocommerce'); $message_two = sprintf(__('Or you can download a pre-built version of the plugin from the <a href="%1$s">WordPress.org repository</a> or by visiting <a href="%2$s">the releases page in the GitHub repository</a>.', 'woocommerce'), 'https://wordpress.org/plugins/woocommerce/', 'https://github.com/woocommerce/woocommerce/releases'); printf('<div class="error"><p>%s %s</p></div>', $message_one, $message_two); } public function is_wc_admin_active() { return function_exists('wc_admin_url'); } public function call_function($function_name, ...$parameters) { return wc_get_container()->get(LegacyProxy::class)->call_function($function_name, ...$parameters); } public function call_static($class_name, $method_name, ...$parameters) { return wc_get_container()->get(LegacyProxy::class)->call_static($class_name, $method_name, ...$parameters); } public function get_instance_of(string $class_name, ...$args) { return wc_get_container()->get(LegacyProxy::class)->get_instance_of($class_name, ...$args); } }