<?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);
}
}