Commit inicial - WordPress Análisis de Precios Unitarios

- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-03 21:04:30 -06:00
commit a22573bf0b
24068 changed files with 4993111 additions and 0 deletions

View File

@@ -0,0 +1,268 @@
<?php
/**
* WordPress gTranslate Plugin Compatibility
* https://gtranslate.io/
*
* @package BWFAN
* @since 1.0.0
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_GTRANSLATE' ) ) {
/**
* Class BWFAN_Compatibility_With_GTRANSLATE
*
* Handles compatibility with the GTranslate WordPress plugin
*/
class BWFAN_Compatibility_With_GTRANSLATE {
/**
* Constructor
*/
public function __construct() {
add_filter( 'bwfan_enable_language_settings', array( $this, 'bwfan_add_gtranslate_language_settings' ) );
}
/**
* Get GTranslate language code from various sources
*
* @return string Language code
*/
public static function get_gtranslate_language() {
// Check if googtrans cookie is set
if ( isset( $_COOKIE['googtrans'] ) ) {
$googtrans = bwf_clean( $_COOKIE['googtrans'] );
$googtrans = explode( '/', $googtrans );
return is_array( $googtrans ) ? end( $googtrans ) : '';
}
// Check if HTTP_X_GT_LANG header is set
if ( isset( $_SERVER['HTTP_X_GT_LANG'] ) && ! empty( $_SERVER['HTTP_X_GT_LANG'] ) ) {
return bwf_clean( $_SERVER['HTTP_X_GT_LANG'] );
}
// Check domain mapping if HTTP_HOST is set
if ( isset( $_SERVER['HTTP_HOST'] ) && ! empty( $_SERVER['HTTP_HOST'] ) ) {
$current_domain = bwf_clean( $_SERVER['HTTP_HOST'] );
$gtranslate = get_option( 'GTranslate' );
$domain = wp_parse_url( home_url(), PHP_URL_HOST );
if ( $current_domain === $domain ) {
return isset( $gtranslate['default_language'] ) ? $gtranslate['default_language'] : 'en';
}
if ( isset( $gtranslate['custom_domains'] ) && ! empty( $gtranslate['custom_domains'] ) ) {
$custom_domains_data = $gtranslate['custom_domains_data'];
if ( is_string( $custom_domains_data ) && ! empty( $custom_domains_data ) ) {
$decoded_data = json_decode( stripslashes( $custom_domains_data ), true );
if ( is_array( $decoded_data ) ) {
$custom_domains_data = $decoded_data;
}
}
if ( is_array( $custom_domains_data ) && ! empty( $custom_domains_data ) ) {
$found_lang = array_search( $current_domain, $custom_domains_data, true );
if ( ! empty( $found_lang ) ) {
return $found_lang;
}
}
}
if ( isset( $gtranslate['enterprise_version'] ) && $gtranslate['enterprise_version'] ) {
$parts = explode( '.', $current_domain );
if ( count( $parts ) > 2 && ! empty( $parts[0] ) ) {
$potential_lang = trim( $parts[0] );
// Validate potential language code format
if ( ! empty( $potential_lang ) && preg_match( '/^[a-z]{2}(-[A-Z]{2})?$/', $potential_lang ) ) {
// Check if the subdomain is a valid language code
$enabled_languages = [];
if ( isset( $gtranslate['fincl_langs'] ) && ! empty( $gtranslate['fincl_langs'] ) ) {
$enabled_languages = $gtranslate['fincl_langs'];
} elseif ( isset( $gtranslate['incl_langs'] ) && ! empty( $gtranslate['incl_langs'] ) ) {
$enabled_languages = $gtranslate['incl_langs'];
}
if ( ! empty( $enabled_languages ) && in_array( $potential_lang, $enabled_languages, true ) ) {
return $potential_lang;
}
}
}
}
}
return '';
}
/**
* Add GTranslate languages to FunnelKit Automation language settings
*
* @param array $settings Existing language settings array
*
* @return array Modified settings array with GTranslate languages added
*/
public function bwfan_add_gtranslate_language_settings( $settings ) {
// Ensure settings is an array
if ( ! is_array( $settings ) ) {
$settings = [];
}
$gtranslate_options = get_option( 'GTranslate' );
if ( empty( $gtranslate_options ) || ! isset( $gtranslate_options['incl_langs'] ) || ! is_array( $gtranslate_options['incl_langs'] ) ) {
return $settings;
}
$gtranslate_language_codes = $gtranslate_options['incl_langs'];
$gtranslate_languages = [];
foreach ( $gtranslate_language_codes as $code ) {
if ( ! empty( $code ) && is_string( $code ) ) {
$gtranslate_languages[ $code ] = $this->get_language_display_name( $code );
}
}
if ( ! empty( $gtranslate_languages ) ) {
$settings['lang_options'] = array_merge( isset( $settings['lang_options'] ) ? $settings['lang_options'] : [], $gtranslate_languages );
$settings['enable_lang'] = 1;
}
return $settings;
}
/**
* Convert a URL to its language-specific domain equivalent
*
* @param string $url Original URL to be translated
* @param string $lang Language code to translate the URL to
*
* @return string URL with the appropriate language-specific domain or path
*/
public static function get_translated_domain_url( $url, $lang ) {
// Validate input parameters
if ( empty( $url ) || empty( $lang ) || ! is_string( $url ) || ! is_string( $lang ) ) {
return $url;
}
$gtranslate_settings = get_option( 'GTranslate' );
if ( empty( $gtranslate_settings ) || ! is_array( $gtranslate_settings ) ) {
return $url;
}
// Parse the URL
$url_parts = wp_parse_url( $url );
if ( false === $url_parts || ! isset( $url_parts['host'] ) ) {
return $url;
}
$base_domain = $url_parts['host'];
$scheme = isset( $url_parts['scheme'] ) ? $url_parts['scheme'] : 'https';
$path = isset( $url_parts['path'] ) ? $url_parts['path'] : '';
$query = isset( $url_parts['query'] ) ? '?' . $url_parts['query'] : '';
$fragment = isset( $url_parts['fragment'] ) ? '#' . $url_parts['fragment'] : '';
// Determine URL structure based on GTranslate version
$url_structure = 'none';
if ( isset( $gtranslate_settings['pro_version'] ) && ! empty( $gtranslate_settings['pro_version'] ) ) {
$url_structure = 'sub_directory';
} elseif ( isset( $gtranslate_settings['enterprise_version'] ) && ! empty( $gtranslate_settings['enterprise_version'] ) ) {
$url_structure = 'sub_domain';
}
// Handle custom domains first (highest priority)
if ( isset( $gtranslate_settings['custom_domains'] ) && ! empty( $gtranslate_settings['custom_domains'] ) ) {
$custom_domains_data = $gtranslate_settings['custom_domains_data'];
if ( is_string( $custom_domains_data ) && ! empty( $custom_domains_data ) ) {
$decoded_data = json_decode( stripslashes( $custom_domains_data ), true );
if ( is_array( $decoded_data ) ) {
$custom_domains_data = $decoded_data;
}
}
// Check if language exists in custom domains data
if ( is_array( $custom_domains_data ) && ! empty( $custom_domains_data ) && isset( $custom_domains_data[ $lang ] ) && ! empty( $custom_domains_data[ $lang ] ) ) {
$new_domain = $custom_domains_data[ $lang ];
$url = $scheme . '://' . $new_domain . $path . $query . $fragment;
}
}
// Handle URL structure based on version
if ( 'sub_domain' === $url_structure ) {
// Enterprise version: lang.domain.com/path
$url = $scheme . '://' . $lang . '.' . $base_domain . $path . $query . $fragment;
} elseif ( 'sub_directory' === $url_structure ) {
// Pro version: domain.com/lang/path
$url = $scheme . '://' . $base_domain . '/' . $lang . $path . $query . $fragment;
}
return $url;
}
/**
* Get language display name using WordPress built-in functions
*
* @param string $lang_code Language code
*
* @return string Language display name
*/
private function get_language_display_name( $lang_code ) {
// Validate input - ensure it's a non-empty string
if ( ! is_string( $lang_code ) || empty( trim( $lang_code ) ) ) {
// Return a safe default for invalid input
return 'UNKNOWN';
}
// Try PHP native function first (PHP 8.1+) - faster and more reliable
if ( function_exists( 'locale_get_display_language' ) ) {
$display_name = locale_get_display_language( $lang_code, 'en' );
if ( ! empty( $display_name ) && $display_name !== $lang_code ) {
return $display_name;
}
}
// Fallback to WordPress method for older PHP versions or edge cases
$translations = $this->wp_get_available_translations();
$wp_lang_code = str_replace( '-', '_', $lang_code );
if ( isset( $translations[ $wp_lang_code ]['native_name'] ) ) {
return $translations[ $wp_lang_code ]['native_name'];
}
// Also try the original format in case it matches
if ( isset( $translations[ $lang_code ]['native_name'] ) ) {
return $translations[ $lang_code ]['native_name'];
}
if ( strlen( $lang_code ) === 2 && strpos( $lang_code, '_' ) === false && strpos( $lang_code, '-' ) === false ) {
$with_country = $lang_code . '_' . strtoupper( $lang_code );
if ( isset( $translations[ $with_country ]['native_name'] ) ) {
return $translations[ $with_country ]['native_name'];
}
}
// return uppercase language code if translation not found
return strtoupper( $lang_code );
}
/**
* Wrap wp_get_available_translations
*
* @return array Available translations array
*/
private function wp_get_available_translations() {
if ( ! function_exists( 'wp_get_available_translations' ) ) {
require_once ABSPATH . 'wp-admin/includes/translation-install.php';
}
// WordPress may fail silently or return an empty array if offline, and will cache the result otherwise.
$translations = wp_get_available_translations();
// Ensure we return an array even if the function fails
return is_array( $translations ) ? $translations : [];
}
}
new BWFAN_Compatibility_With_GTRANSLATE();
}

View File

@@ -0,0 +1,17 @@
<?php
/**
* MailPoet emails and newsletters in WordPress
* https://wordpress.org/plugins/mailpoet/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_MailPoet' ) ) {
class BWFAN_Compatibility_With_MailPoet {
public function __construct() {
if ( ! empty( WooFunnels_AS_DS::$unique ) || true === BWFAN_Common::$change_data_strore ) {
BWFAN_Common::remove_actions( 'init', 'MailPoet\Config\Initializer', 'initialize' );
}
}
}
new BWFAN_Compatibility_With_MailPoet();
}

View File

@@ -0,0 +1,36 @@
<?php
/**
* Uni CPO Plugin Compatibility
* https://wordpress.org/plugins/uni-woo-custom-product-options/
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! class_exists( 'BWFAN_Compatibility_With_Uni_Cpo' ) ) {
class BWFAN_Compatibility_With_Uni_Cpo {
public function __construct() {
add_filter( 'bwfan_abandoned_modify_cart_item_data', [ $this, 'bwfan_uni_cpo_item_data' ] );
}
/**
* @param $item_data
*
* @return mixed
*/
public function bwfan_uni_cpo_item_data( $item_data ) {
if ( ! isset( $item_data['_cpo_data'] ) ) {
return $item_data;
}
$cpo_data = $item_data['_cpo_data'];
unset( $item_data['_cpo_data'] );
$item_data['cpo_data'] = $cpo_data;
return $item_data;
}
}
new BWFAN_Compatibility_With_Uni_Cpo();
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* WooCommerce Pre-Orders
* https://woocommerce.com/products/woocommerce-pre-orders/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_WC_PreOrders' ) ) {
class BWFAN_Compatibility_With_WC_PreOrders {
public function __construct() {
add_filter( 'woocommerce_order_is_paid_statuses', array( $this, 'append_order_status' ) );
}
/**
* passing wc-pre-order status as paid order
*
* @param $status
*
* @return mixed
*/
public function append_order_status( $status ) {
$status[] = 'wc-pre-ordered';
return $status;
}
}
new BWFAN_Compatibility_With_WC_PreOrders();
}

View File

@@ -0,0 +1,46 @@
<?php
/**
* WC Product Bundle
* https://woocommerce.com/products/product-bundles/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_WC_Product_Bundle' ) ) {
class BWFAN_Compatibility_With_WC_Product_Bundle {
public function __construct() {
add_filter( 'bwfan_abandoned_cart_items_visibility', array( $this, 'bwfan_modify_abandoned_cart_items' ), 10, 1 );
}
/**
* @return bool
*/
public function bwfan_modify_abandoned_cart_items( $cart ) {
foreach ( $cart as $cart_item_key => $item ) {
if ( ! function_exists( 'wc_pb_maybe_is_bundled_cart_item' ) || ! wc_pb_maybe_is_bundled_cart_item( $item ) ) {
continue;
}
$bundled_item_id = $item['bundled_item_id'];
if ( empty( $bundled_item_id ) ) {
continue;
}
$bundled_item_data = new WC_Bundled_Item_Data( $bundled_item_id );
if ( ! $bundled_item_data instanceof WC_Bundled_Item_Data ) {
continue;
}
$bundled_cart_visibility = $bundled_item_data->get_meta( 'cart_visibility' );
if ( 'hidden' !== $bundled_cart_visibility ) {
continue;
}
unset( $cart[ $cart_item_key ] );
}
return $cart;
}
}
new BWFAN_Compatibility_With_WC_Product_Bundle();
}

View File

@@ -0,0 +1,21 @@
<?php
/**
* Weglot Translate Translate your WordPress website and go multilingual
* https://weglot.com/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_Weglot' ) ) {
class BWFAN_Compatibility_With_Weglot {
public function __construct() {
if ( false === strpos( $_SERVER['REQUEST_URI'], BWFAN_API_NAMESPACE . '/automation/' ) ) {
return;
}
/** Disable weglot translation on automation page */
add_filter( 'weglot_active_translation_before_process', '__return_false' );
}
}
new BWFAN_Compatibility_With_Weglot();
}

View File

@@ -0,0 +1,97 @@
<?php
/**
* WordPress Multilingual Plugin
* https://wpml.org/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_WPML' ) ) {
class BWFAN_Compatibility_With_WPML {
public function __construct() {
add_action( 'bwfan_email_setup_locale', [ $this, 'translate_email_body' ] );
}
/**
* setup locale for email with translation plugins
*
* @param $lang
*/
public function translate_email_body( $lang ) {
if ( empty( $lang ) ) {
return;
}
global $woocommerce_wpml;
if ( ! class_exists( 'woocommerce_wpml' ) || ! $woocommerce_wpml instanceof woocommerce_wpml ) {
return;
}
$woocommerce_wpml->emails->change_email_language( $lang );
}
/**
* Get translated term IDs dynamically based on the context
*
* @param array $term_ids The original term IDs
* @param string $taxonomy_name The taxonomy name
* @param array $automation_data Automation context data
*
* @return array An array of translated term IDs
*/
public static function get_translated_term_ids( $term_ids, $taxonomy_name, $automation_data = [] ) {
if ( empty( $term_ids ) ) {
return $term_ids;
}
$language_code = self::detect_language_from_sources( $automation_data );
if ( empty( $language_code ) ) {
return $term_ids;
}
$all_translated_ids = [];
foreach ( $term_ids as $term_id ) {
$all_translated_ids[] = $term_id;
$translated_id = apply_filters( 'wpml_object_id', $term_id, $taxonomy_name, false, $language_code );
if ( $translated_id ) {
$all_translated_ids[] = $translated_id;
}
}
$ids = array_unique( $all_translated_ids );
sort( $ids );
return $ids;
}
/**
* Detect language from various possible sources
*
* @param $automation_data
*
* @return array|mixed|string
*/
private static function detect_language_from_sources( $automation_data ) {
if ( isset( $automation_data['global']['language'] ) ) {
return $automation_data['global']['language'];
}
global $sitepress;
$default_language = $sitepress->get_default_language();
$sitepress->get_current_language();
if ( ! isset( $automation_data['global']['order_id'] ) ) {
return $default_language;
}
$order = $automation_data['global']['order_id'];
$order = wc_get_order( $order );
if ( ! $order instanceof WC_Order ) {
return $default_language;
}
$order_language = $order->get_meta( 'wpml_language' );
return ! empty( $order_language ) ? $order_language : $default_language;
}
}
new BWFAN_Compatibility_With_WPML();
}

View File

@@ -0,0 +1,757 @@
<?php
/**
* WooCommerce Plugin Compatibility
*
* This source file is subject to the GNU General Public License v3.0
* that is bundled with this package in the file license.txt.
* It is also available through the world-wide-web at this URL:
* http://www.gnu.org/licenses/gpl-3.0.html
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@skyverge.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade the plugin to newer
* versions in the future. If you wish to customize the plugin for your
* needs please refer to http://www.skyverge.com
*
* @author SkyVerge
* @copyright Copyright (c) 2013, SkyVerge, Inc.
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! class_exists( 'BWFAN_Woocommerce_Compatibility' ) ) :
/**
* WooCommerce Compatibility Utility Class
*
* The unfortunate purpose of this class is to provide a single point of
* compatibility functions for dealing with supporting multiple versions
* of WooCommerce.
*
* The recommended procedure is to rename this file/class, replacing "my plugin"
* with the particular plugin name, so as to avoid clashes between plugins.
* Over time we expect to remove methods from this class, using the current
* ones directly, as support for older versions of WooCommerce is dropped.
*
* Current Compatibility: 2.0.x - 2.1
*
* @version 1.0
*/
class BWFAN_Woocommerce_Compatibility {
/**
* Compatibility function for outputting a woocommerce attribute label
*
* @param string $label the label to display
*
* @return string the label to display
* @since 1.0
*
*/
public static function wc_attribute_label( $label ) {
if ( self::is_wc_version_gte_2_1() ) {
return wc_attribute_label( $label );
}
}
/**
* @param $name
*
* @return string
*/
public static function wc_attribute_taxonomy_name( $name ) {
if ( self::is_wc_version_gte_2_1() ) {
return wc_attribute_taxonomy_name( $name );
}
}
/**
* @return array
*/
public static function wc_get_attribute_taxonomies() {
if ( self::is_wc_version_gte_2_1() ) {
return wc_get_attribute_taxonomies();
}
}
/**
* @return string
*/
public static function wc_placeholder_img_src() {
if ( self::is_wc_version_gte_2_1() ) {
return wc_placeholder_img_src();
}
}
/**
* @param WC_Product $product
*
* @return string
*/
public static function woocommerce_get_formatted_product_name( $product ) {
if ( self::is_wc_version_gte_2_1() ) {
return $product->get_formatted_name();
}
}
/**
* @param $order
* @param $item
*
* @return bool|string|void|WC_Product
*/
public static function get_product_from_item( $order, $item ) {
if ( ! $item instanceof WC_Order_Item_Product ) {
return '';
}
if ( self::is_wc_version_gte_3_0() ) {
return $item->get_product();
}
}
/**
* @param WC_Product $product
*
* @return mixed|string|void
*/
public static function get_short_description( $product ) {
if ( false === $product ) {
return '';
}
if ( self::is_wc_version_gte_3_0() ) {
return apply_filters( 'woocommerce_short_description', $product->get_short_description() );
}
}
/**
* @param WC_Order $order
* @param WC_Order_Item $item
*
* @return mixed
*/
public static function get_productname_from_item( $order, $item ) {
if ( self::is_wc_version_gte_3_0() ) {
return $item->get_name();
}
}
/**
* @param WC_Order $order
* @param WC_Order_Item $item
*
* @return mixed
*/
public static function get_qty_from_item( $order, $item ) {
if ( self::is_wc_version_gte_3_0() ) {
return $item->get_quantity();
}
}
/**
* @param WC_Order $order
* @param $item
*
* @return string|void
*/
public static function get_display_item_meta( $order, $item ) {
if ( self::is_wc_version_gte_3_0() ) {
return wc_display_item_meta( $item );
}
}
/**
* @param WC_Order $order
* @param $item
*
* @return string|void
*/
public static function get_display_item_downloads( $order, $item ) {
if ( self::is_wc_version_gte_3_0() ) {
return wc_display_item_downloads( $item );
}
}
/**
* @param WC_Product $product
*
* @return mixed|string
*/
public static function get_purchase_note( $product ) {
if ( self::is_wc_version_gte_3_0() ) {
return $product ? $product->get_purchase_note() : '';
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_payment_gateway_from_order( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_payment_method();
}
}
/**
* @param WC_Order $order
* @param WC_Order_Item $item
*
* @return mixed
*/
public static function get_item_subtotal( $order, $item ) {
if ( self::is_wc_version_gte_3_0() ) {
return $item->get_subtotal();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_shipping_country_from_order( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_country();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_billing_country_from_order( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_country();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_billing_email( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_email();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_id( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_id();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_billing_1( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_address_1();
}
}
/**
* @param WC_Order $order
* @param $key
*
* @return mixed
*/
public static function get_order_data( $order, $key ) {
if ( ! $order instanceof WC_Order ) {
return '';
}
if ( method_exists( $order, 'get_' . $key ) ) {
return call_user_func( array( $order, 'get_' . $key ) );
}
if ( method_exists( $order, 'get' . $key ) ) {
return call_user_func( array( $order, 'get' . $key ) );
}
$data = $order->get_meta( $key );
if ( ! empty( $data ) ) {
return $data;
}
return $order->get_meta( '_' . $key );
}
/**
* get order meta: currently done via get_post_meta, will change later to WC func
*
* @param $order_id
* @param $key
*
* @return mixed
*/
public static function get_order_meta( $order_id, $key ) {
$order = wc_get_order( $order_id );
if ( ! $order instanceof WC_Order ) {
return '';
}
return $order->get_meta( $key );
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_billing_first_name( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_first_name();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_billing_last_name( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_last_name();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_status( $order ) {
$status = $order->get_status();
if ( strpos( $status, 'wc-' ) === false ) {
return 'wc-' . $status;
} else {
return $status;
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_billing_2( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_address_2();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_1( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_address_1();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_total( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_total();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_2( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_address_2();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_billing_city( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_city();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_billing_state( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_state();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_billing_postcode( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_billing_postcode();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_city( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_city();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_state( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_state();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_shipping_postcode( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_shipping_postcode();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_order_date( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_date_created();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_payment_method( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_payment_method_title();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_customer_ip_address( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_customer_ip_address();
}
}
/**
* @param WC_Order $order
*
* @return mixed
*/
public static function get_customer_note( $order ) {
if ( self::is_wc_version_gte_3_0() ) {
return $order->get_customer_note();
}
}
/**
* Compatibility function to add and store a notice
*
* @param string $message The text to display in the notice.
* @param string $notice_type The singular name of the notice type - either error, success or notice. [optional]
*
* @since 1.0
*
*/
public static function wc_add_notice( $message, $notice_type = 'success' ) {
if ( self::is_wc_version_gte_2_1() ) {
wc_add_notice( $message, $notice_type );
}
}
/**
* Prints messages and errors which are stored in the session, then clears them.
*
* @since 1.0
*/
public static function wc_print_notices() {
if ( self::is_wc_version_gte_2_1() ) {
wc_print_notices();
}
}
/**
* Compatibility function to queue some JavaScript code to be output in the footer.
*
* @param string $code javascript
*
* @since 1.0
*
*/
public static function wc_enqueue_js( $code ) {
if ( self::is_wc_version_gte_2_1() ) {
wc_enqueue_js( $code );
}
}
/**
* Sets WooCommerce messages
*
* @since 1.0
*/
public static function set_messages() {
global $woocommerce;
if ( false === self::is_wc_version_gte_2_1() ) {
$woocommerce->set_messages();
}
}
/**
* Returns a new instance of the woocommerce logger
*
* @return object logger
* @since 1.0
*/
public static function new_wc_logger() {
if ( self::is_wc_version_gte_2_1() ) {
return new WC_Logger();
}
}
/**
* Format decimal numbers ready for DB storage
*
* Sanitize, remove locale formatting, and optionally round + trim off zeros
*
* @param float|string $number Expects either a float or a string with a decimal separator only (no thousands)
* @param mixed $dp number of decimal points to use, blank to use woocommerce_price_num_decimals, or false to avoid all rounding.
* @param boolean $trim_zeros from end of string
*
* @return string
* @since 1.0
*
*/
public static function wc_format_decimal( $number, $dp = false, $trim_zeros = false ) {
if ( self::is_wc_version_gte_2_1() ) {
return wc_format_decimal( $number, $dp, $trim_zeros );
}
}
/**
* Get the count of notices added, either for all notices (default) or for one particular notice type specified
* by $notice_type.
*
* @param string $notice_type The name of the notice type - either error, success or notice. [optional]
*
* @return int the notice count
* @since 1.0
*
*/
public static function wc_notice_count( $notice_type = '' ) {
if ( self::is_wc_version_gte_2_1() ) {
return wc_notice_count( $notice_type );
}
}
/**
* Compatibility function to use the new WC_Admin_Meta_Boxes class for the save_errors() function
*
* @since 1.0-1
*/
public static function save_errors() {
if ( self::is_wc_version_gte_2_1() ) {
WC_Admin_Meta_Boxes::save_errors();
}
}
/**
* Compatibility function to get the version of the currently installed WooCommerce
*
* @return string woocommerce version number or null
* @since 1.0
*/
public static function get_wc_version() {
// WOOCOMMERCE_VERSION is now WC_VERSION, though WOOCOMMERCE_VERSION is still available for backwards compatibility, we'll disregard it on 2.1+
if ( defined( 'WC_VERSION' ) && WC_VERSION ) {
return WC_VERSION;
}
if ( defined( 'WOOCOMMERCE_VERSION' ) && WOOCOMMERCE_VERSION ) {
return WOOCOMMERCE_VERSION;
}
return null;
}
/**
* Returns the WooCommerce instance
*
* @return WooCommerce woocommerce instance
* @since 1.0
*/
public static function WC() {
if ( self::is_wc_version_gte_2_1() ) {
return WC();
}
}
/**
* Returns true if the WooCommerce plugin is loaded
*
* @return boolean true if WooCommerce is loaded
* @since 1.0
*/
public static function is_wc_loaded() {
if ( self::is_wc_version_gte_2_1() ) {
return class_exists( 'WooCommerce' );
}
}
/**
* Returns true if the installed version of WooCommerce is 2.1 or greater
*
* @return boolean true if the installed version of WooCommerce is 2.1 or greater
* @since 1.0
*/
public static function is_wc_version_gte_2_1() {
// can't use gte 2.1 at the moment because 2.1-BETA < 2.1
return self::is_wc_version_gt( '2.0.20' );
}
/**
* Returns true if the installed version of WooCommerce is 2.6 or greater
*
* @return boolean true if the installed version of WooCommerce is 2.1 or greater
* @since 1.0
*/
public static function is_wc_version_gte_3_0() {
return version_compare( self::get_wc_version(), '3.0.0', 'ge' );
}
/**
* Returns true if the installed version of WooCommerce is greater than $version
*
* @param string $version the version to compare
*
* @return boolean true if the installed version of WooCommerce is > $version
* @since 1.0
*
*/
public static function is_wc_version_gt( $version ) {
return self::get_wc_version() && version_compare( self::get_wc_version(), $version, '>' );
}
/**
* @param $item
* @param $key
*
* @return mixed
*/
public static function get_item_data( $item, $key ) {
if ( ! $item instanceof WC_Order ) {
return '';
}
if ( method_exists( $item, 'get_' . $key ) ) {
return call_user_func( array( $item, 'get_' . $key ) );
}
return $item->get_meta( $key );
}
public static function get_product_variation_length( $obj ) {
if ( self::is_wc_version_gte_3_0() ) {
$length = $obj->get_length() ? $obj->get_length() : '';
}
return $length;
}
public static function get_product_variation_width( $obj ) {
if ( self::is_wc_version_gte_3_0() ) {
$width = $obj->get_width() ? $obj->get_width() : '';
}
return $width;
}
public static function get_product_variation_height( $obj ) {
if ( self::is_wc_version_gte_3_0() ) {
$height = $obj->get_height() ? $obj->get_height() : '';
}
return $height;
}
public static function get_product_variation_weight( $obj ) {
if ( self::is_wc_version_gte_3_0() ) {
$weight = $obj->get_weight() ? $obj->get_weight() : '';
}
return $weight;
}
/**
* @param WC_Product $product
*
* @return mixed
*/
public static function get_parent_id( $product ) {
if ( self::is_wc_version_gte_3_0() ) {
return $product->get_parent_id();
}
}
/**
* @param WC_Product $product
*
* @return mixed
*/
static function is_variation( $product ) {
return $product->is_type( [ 'variation', 'subscription_variation' ] );
}
}
endif; // Class exists check

View File

@@ -0,0 +1,32 @@
<?php
/**
* WooCommerce Product Add-Ons Compatibility
* https://wpml.org/
*/
if ( ! class_exists( 'BWFAN_Compatibility_With_WC_Product_Addon' ) ) {
class BWFAN_Compatibility_With_WC_Product_Addon {
public function __construct() {
add_filter( 'bwfan_abandoned_modify_cart_item_data', [ $this, 'abandoned_modify_cart_item_data' ], 10, 1 );
}
/**
* Modify cart item data for abandoned carts.
*
* @param array $item_data Cart item data.
*
* @return array Modified cart item data.
*/
public function abandoned_modify_cart_item_data( $item_data ) {
if ( defined( 'PEWC_PLUGIN_VERSION' ) && isset( $item_data['product_extras'] ) ) {
remove_filter( 'woocommerce_add_cart_item_data', 'pewc_add_cart_item_data' );
}
return $item_data;
}
}
new BWFAN_Compatibility_With_WC_Product_Addon();
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.