Current File : /home/kelaby89/www/wp/wp-content/plugins/trx_addons/components/api/woocommerce/woocommerce.php |
<?php
/**
* Plugin support: WooCommerce
*
* @package ThemeREX Addons
* @since v1.5
*/
// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
exit;
}
// Check if plugin installed and activated
// Attention! This function is used in many files and was moved to the api.php
/*
if ( ! function_exists( 'trx_addons_exists_woocommerce' ) ) {
function trx_addons_exists_woocommerce() {
return class_exists('Woocommerce');
}
}
*/
if ( ! function_exists( 'trx_addons_is_woocommerce_page' ) ) {
/**
* Check if current page is any WooCommerce page
*
* @return boolean True if page is WooCommerce page
*/
function trx_addons_is_woocommerce_page() {
$rez = false;
if ( trx_addons_exists_woocommerce() ) {
$rez = is_woocommerce()
|| is_shop()
|| is_product()
|| is_product_category()
|| is_product_tag()
|| is_product_taxonomy()
|| is_cart()
|| is_checkout()
|| is_account_page();
}
return $rez;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_post_type_taxonomy' ) ) {
add_filter( 'trx_addons_filter_post_type_taxonomy', 'trx_addons_woocommerce_post_type_taxonomy', 10, 2 );
/**
* Return taxonomy name for the post type (this post_type have 2+ taxonomies)
*
* @hook trx_addons_filter_post_type_taxonomy
*
* @param string $tax Taxonomy name
* @param string $post_type Post type name
*
* @return string Taxonomy name
*/
function trx_addons_woocommerce_post_type_taxonomy($tax='', $post_type='') {
if ($post_type == 'product') {
$tax = 'product_cat';
}
return $tax;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_blog_all_posts_link' ) ) {
add_filter( 'trx_addons_filter_get_blog_all_posts_link', 'trx_addons_woocommerce_get_blog_all_posts_link', 10, 2 );
/**
* Return URL to main shop page for the breadcrumbs
*
* @hook trx_addons_filter_get_blog_all_posts_link
*
* @param string $link URL to main shop page
* @param array $args Additional arguments
*
* @return string URL to main shop page
*/
function trx_addons_woocommerce_get_blog_all_posts_link( $link = '', $args = array() ) {
if ( empty( $link ) && trx_addons_is_woocommerce_page() && ! is_shop() ) {
if ( ( $url = trx_addons_woocommerce_get_shop_page_link() ) != '' ) {
$id = trx_addons_woocommerce_get_shop_page_id();
$front_id = get_option( 'show_on_front' ) == 'page' ? (int) get_option( 'page_on_front' ) : 0;
if ( $front_id == 0 || $id == 0 || $front_id != $id ) {
$link = '<a class="breadcrumbs_item all_posts" href="' . esc_url( $url ) . '">' . ( $id ? get_the_title( $id ) : esc_html__('Shop', 'trx_addons') ) . '</a>';
} else {
$link = '#'; // To disable link
}
}
}
return $link;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_search_form_url' ) ) {
add_filter( 'trx_addons_filter_search_form_url', 'trx_addons_woocommerce_search_form_url' );
/**
* Return URL to main shop page for the search form
*
* @hook trx_addons_filter_search_form_url
*
* @param string $url URL to main shop page
*
* @return string URL to main shop page
*/
function trx_addons_woocommerce_search_form_url( $url ) {
if ( trx_addons_exists_woocommerce() && trx_addons_is_woocommerce_page() && is_shop() ) {
$shop_url = trx_addons_woocommerce_get_shop_page_link();
if ( ! empty( $shop_url ) ) {
$url = $shop_url;
}
}
return $url;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_shop_page_id' ) ) {
/**
* Return shop page ID
*
* @return int Shop page ID
*/
function trx_addons_woocommerce_get_shop_page_id() {
return get_option('woocommerce_shop_page_id');
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_shop_page_link' ) ) {
/**
* Return shop page link
*
* @return string Shop page link
*/
function trx_addons_woocommerce_get_shop_page_link() {
$url = '';
$id = trx_addons_woocommerce_get_shop_page_id();
if ( $id ) {
$url = get_permalink( $id );
}
return $url;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_blog_title' ) ) {
add_filter( 'trx_addons_filter_get_blog_title', 'trx_addons_woocommerce_get_blog_title' );
/**
* Return a title for the shop page
*
* @param string $title Default title
*
* @return string Shop title
*/
function trx_addons_woocommerce_get_blog_title( $title = '' ) {
if ( trx_addons_exists_woocommerce() && trx_addons_is_woocommerce_page() && is_shop() ) {
$id = trx_addons_woocommerce_get_shop_page_id();
$title = $id ? get_the_title( $id ) : esc_html__('Shop', 'trx_addons');
}
return $title;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_filter_name_from_attribute' ) ) {
/**
* Return a filter name for the WooCommerce attribute by the taxonomy (attribute) name
*
* @param string $tax_name Attribute name
* @param bool $reverse Reverse mode: add 'filter_' (if true) or '_filter' (if false) to the attribute name
*
* @return string Filter name
*/
function trx_addons_woocommerce_get_filter_name_from_attribute( $tax_name, $reverse = false ) {
return ( ! $reverse ? 'filter_' : '' )
. ( function_exists( 'wc_attribute_taxonomy_slug' )
? wc_attribute_taxonomy_slug( $tax_name )
: ( substr( $tax_name, 0, 3 ) == 'pa_' ? substr($tax_name, 3) : $tax_name )
)
. ( $reverse ? '_filter' : '' );
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_attribute_by_id' ) ) {
/**
* Return an attribute data by ID
*
* @param int $id Attribute ID
* @param string $field Field name to return. If empty - return full attribute object
*
* @return string Attribute data
*/
function trx_addons_woocommerce_get_attribute_by_id( $id, $field = '' ) {
global $wpdb;
$attribute = $wpdb->get_row(
$wpdb->prepare( "SELECT attribute_type, attribute_label, attribute_name, attribute_orderby, attribute_public
FROM {$wpdb->prefix}woocommerce_attribute_taxonomies WHERE attribute_id = %d",
$id
)
);
return ! empty( $field )
? ( ! empty( $attribute->{$field} ) ? $attribute->{$field} : '' )
: $attribute;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_get_attributes_data' ) ) {
/**
* Return an extended data for WooCommerce attributes
*
* @param string $name Attribute name
* @param string $field Field name to return. If empty - return full attribute object
* @param string $default Default value to return
*
* @return string Attribute data
*/
function trx_addons_woocommerce_get_attributes_data( $name = '', $field = '', $default = '' ) {
$att_data = get_option( 'woocommerce_attributes_data' );
if ( empty( $att_data ) || ! is_array( $att_data ) ) {
$att_data = array();
}
if ( empty( $name ) ) {
return $att_data;
} else {
if ( substr( $name, 0, 3 ) == 'pa_' ) {
$name = substr( $name, 3 );
}
if ( empty( $field ) ) {
return isset( $att_data[ $name ] ) ? $att_data[ $name ] : array();
} else {
return isset( $att_data[ $name ][ $field ] ) ? $att_data[ $name ][ $field ] : $default;
}
}
}
}
if ( ! function_exists( 'trx_addons_woocommerce_set_attributes_data' ) ) {
/**
* Set an extended data for WooCommerce attributes
*
* @param mixed $data Attribute data
* @param string $name Attribute name
* @param string $field Field name to update. If empty - update full attribute object
*/
function trx_addons_woocommerce_set_attributes_data( $data, $name = '', $field = '' ) {
$att_data = get_option( 'woocommerce_attributes_data' );
if ( empty( $att_data ) || ! is_array( $att_data ) ) {
$att_data = array();
}
if ( empty( $name ) ) {
$att_data = $data;
} else {
if ( substr( $name, 0, 3 ) == 'pa_' ) {
$name = substr( $name, 3 );
}
if ( empty( $field ) ) {
$att_data[ $name ] = $data;
} else {
$att_data[ $name ][ $field ] = $data;
}
}
update_option( 'woocommerce_attributes_data', $att_data );
}
}
if ( ! function_exists( 'trx_addons_woocommerce_login_menu_settings' ) ) {
add_action( "trx_addons_action_login_menu_settings", 'trx_addons_woocommerce_login_menu_settings' );
/**
* Add a WooCommerce link 'My Account' to the user menu
*
* @hooked trx_addons_action_login_menu_settings
*/
function trx_addons_woocommerce_login_menu_settings() {
if ( trx_addons_exists_woocommerce() ) {
$myaccount_page_id = get_option( 'woocommerce_myaccount_page_id' );
if ( ! empty( $myaccount_page_id ) ) {
?><li class="menu-item trx_addons_icon-edit"><a href="<?php echo esc_url( get_permalink( $myaccount_page_id ) ); ?>"><span><?php esc_html_e('My account', 'trx_addons'); ?></span></a></li><?php
}
}
}
}
if ( ! function_exists( 'trx_addons_woocommerce_custom_meta_value' ) ) {
add_filter( 'trx_addons_filter_custom_meta_value', 'trx_addons_woocommerce_custom_meta_value', 10, 2 );
/**
* Return a value of the custom field 'price' or 'rating' for the custom blog items
*
* @hooked trx_addons_filter_custom_meta_value
*
* @param string $value Value to return
* @param string $key Meta key
*
* @return string Value to return
*/
function trx_addons_woocommerce_custom_meta_value( $value, $key ) {
if ( get_post_type() == 'product' && trx_addons_exists_woocommerce() ) {
global $product;
if ( is_object( $product ) ) {
if ( $key == 'price' ) {
$value = $product->get_price_html();
} else if ( in_array( $key, array( 'rating', 'rating_text', 'rating_icons', 'rating_stars' ) ) && get_option( 'woocommerce_enable_review_rating' ) !== 'no' ) {
$value = $key == 'rating_text'
? $product->get_average_rating()
: wc_get_rating_html( $product->get_average_rating() );
}
}
}
return $value;
}
}
// Add stars to the meta
if ( ! function_exists( 'trx_addons_woocommerce_show_post_meta' ) ) {
add_action( 'trx_addons_action_show_post_meta', 'trx_addons_woocommerce_show_post_meta', 10, 3 );
function trx_addons_woocommerce_show_post_meta( $meta, $post_id = '', $args = array() ) {
global $product;
if ( in_array( $meta, array( 'rating' ) ) && trx_addons_exists_woocommerce() && get_post_type() == 'product' && get_option( 'woocommerce_enable_review_rating' ) !== 'no' && is_object( $product ) ) {
$value = $product->get_average_rating();
if ( $value > 0 ) {
echo '<a href="' . esc_url( get_permalink() ) . '" class="post_meta_item post_meta_rating trx_addons_icon-star">'
. '<span class="post_meta_number">' . wp_kses_data( $value ) . '</span>'
. '</a> ';
}
}
}
}
if ( ! function_exists( 'trx_addons_woocommerce_post_meta_args_hide_components' ) ) {
add_filter( 'trx_addons_filter_post_meta_args_hide_components', 'trx_addons_woocommerce_post_meta_args_hide_components' );
/**
* Hide some components in the product meta for the search results, products page, etc.
*
* @hooked trx_addons_filter_post_meta_args_hide_components
*
* @param array $hide_meta_components Components list to hide
*
* @return array Components list to hide
*/
function trx_addons_woocommerce_post_meta_args_hide_components( $hide_meta_components ) {
if ( is_search()
// || is_post_type_archive( 'product' )
// || is_tax( trx_addons_get_post_type_taxonomy( 'product' ) )
) {
$hide_meta_components['product'] = array( 'date', 'date_modified', 'author', 'comments' );
}
return $hide_meta_components;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_blog_item_button' ) ) {
add_filter( 'trx_addons_filter_blog_item_button', 'trx_addons_woocommerce_blog_item_button', 10, 2 );
/**
* Return a button 'Add to cart' for the custom blog items
*
* @hooked trx_addons_filter_blog_item_button
*
* @param string $output Button HTML
* @param array $args Button parameters
*
* @return string Button HTML
*/
function trx_addons_woocommerce_blog_item_button( $output, $args ) {
if ( ! empty( $args['button_link'] ) && $args['button_link'] == 'cart' && trx_addons_exists_woocommerce() && get_post_type() == 'product' ) {
$ajax = 'yes' === get_option( 'woocommerce_enable_ajax_add_to_cart' );
if ( $ajax ) {
wp_enqueue_script( 'wc-add-to-cart' );
}
ob_start();
woocommerce_template_loop_add_to_cart( array(
'class' => 'sc_button button add_to_cart_button' . ($ajax ? ' ajax_add_to_cart' : '')
) );
$output = ob_get_contents();
ob_end_clean();
}
return $output;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_blog_item_button_class' ) ) {
add_filter( 'trx_addons_filter_blog_item_button_class', 'trx_addons_woocommerce_blog_item_button_class', 10, 2 );
/**
* Add class 'woocommerce' to the button 'Add to cart' for the custom blog items
*
* @hooked trx_addons_filter_blog_item_button_class
*
* @param string $class Button class
* @param array $args Button parameters
*
* @return string Button class
*/
function trx_addons_woocommerce_blog_item_button_class( $class, $args ) {
if ( !empty($args['button_link']) && $args['button_link'] == 'cart' && trx_addons_exists_woocommerce() && get_post_type() == 'product' ) {
$class .= ' woocommerce';
}
return $class;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_prevent_admin_access' ) ) {
add_filter( 'woocommerce_prevent_admin_access', 'trx_addons_woocommerce_prevent_admin_access' );
/**
* Prevent WooCommerce from redirecting to the "My Account" page
*
* @hooked woocommerce_prevent_admin_access
*
* @trigger trx_addons_filter_allow_admin_access
*
* @param string $redirect_to URL to redirect
*
* @return string URL to redirect
*/
function trx_addons_woocommerce_prevent_admin_access( $redirect_to ) {
$current_user = wp_get_current_user();
if ( is_array( $current_user->roles ) && apply_filters( 'trx_addons_filter_allow_admin_access', false, $current_user->roles ) ) {
return false;
}
return $redirect_to;
}
}
// WooCommerce Tools widgets area (before the products loop)
//------------------------------------------------------------------------
if ( ! function_exists( 'trx_addons_woocommerce_register_sidebar' ) ) {
add_action( 'widgets_init', 'trx_addons_woocommerce_register_sidebar', 20 );
/**
* Register WooCommerce Tools widgets area
*
* @hooked widgets_init, 20
*
* @trigger trx_addons_filter_register_sidebar
*/
function trx_addons_woocommerce_register_sidebar() {
global $TRX_ADDONS_STORAGE;
register_sidebar( apply_filters( 'trx_addons_filter_register_sidebar', array(
'name' => __( 'WooCommerce Tools', 'trx_addons' ),
'description' => __( 'Widgets before the products loop', 'trx_addons' ),
'id' => 'trx_addons_woocommerce_tools',
'before_widget' => $TRX_ADDONS_STORAGE['widgets_args']['before_widget'],
'after_widget' => $TRX_ADDONS_STORAGE['widgets_args']['after_widget'],
'before_title' => $TRX_ADDONS_STORAGE['widgets_args']['before_title'],
'after_title' => $TRX_ADDONS_STORAGE['widgets_args']['after_title']
) )
);
}
}
if ( ! function_exists( 'trx_addons_woocommerce_show_sidebar' ) ) {
add_action( 'woocommerce_before_shop_loop', 'trx_addons_woocommerce_show_sidebar' );
add_action( 'woocommerce_no_products_found', 'trx_addons_woocommerce_show_sidebar', 1 );
/**
* Show WooCommerce Tools widgets area
*
* @hooked woocommerce_before_shop_loop
* @hooked woocommerce_no_products_found, 1
*
* @trigger trx_addons_action_before_woocommerce_tools
* @trigger trx_addons_action_after_woocommerce_tools
*/
function trx_addons_woocommerce_show_sidebar() {
if ( is_active_sidebar( 'trx_addons_woocommerce_tools' ) ) {
?><div class="trx_addons_woocommerce_tools widget_area"><?php
do_action( 'trx_addons_action_before_woocommerce_tools' );
dynamic_sidebar( 'trx_addons_woocommerce_tools' );
do_action( 'trx_addons_action_after_woocommerce_tools' );
?></div><?php
}
}
}
// Child categories in the header
//------------------------------------------------------------------------
if ( ! function_exists( 'trx_addons_woocommerce_show_child_categories' ) ) {
add_action( 'trx_addons_action_after_layouts_title_block', 'trx_addons_woocommerce_show_child_categories' );
/**
* Show child categories in the custom header
*
* @hooked trx_addons_action_after_layouts_title_block
*
* @trigger trx_addons_filter_woocommerce_show_child_categories
*/
function trx_addons_woocommerce_show_child_categories() {
// Change false to true in the filter argument below to display child categories in the custom header
if ( apply_filters( 'trx_addons_filter_woocommerce_show_child_categories', false ) && trx_addons_exists_woocommerce() && ( is_shop() || is_product_category() ) ) {
$taxonomy = 'product_cat';
$params = trx_addons_widget_woocommerce_search_query_params( array(
array( 'filter' => $taxonomy )
),
true
);
$terms = trx_addons_get_list_terms( false, $taxonomy, array(
'hide_empty' => 1,
'parent' => $params[$taxonomy],
'return_key' => 'id',
'pad_count' => 1
)
);
if ( count( $terms ) > 0 ) {
$terms = array_filter( $terms, function( $term ) {
return substr( $term, 0, 2) !== '- ';
} );
if ( count( $terms ) > 0 ) {
$buttons = array();
foreach ( $terms as $id => $title ) {
$image = trx_addons_get_term_image($id, $taxonomy);
$image = ! empty($image) ? trx_addons_add_thumb_size($image, trx_addons_get_thumb_size( 'medium' ) ) : "";
$image_small = trx_addons_get_term_image_small($id, $taxonomy);
if ( empty( $image_small ) ) {
$icon = trx_addons_get_term_icon($id, $taxonomy);
}
$buttons[] = apply_filters( 'trx_addons_filter_categories_list_button_args', array(
"type" => "default",
"size" => "normal",
"text_align" => "none",
"bg_image" => ! empty($image) ? $image : "",
"image" => ! empty($image_small) ? $image_small : "",
"icon" => empty($image_small) && ! empty( $icon ) ? $icon : "",
"icon_position" => "left",
"title" => $title,
"subtitle" => "",
"link" => get_term_link($id, $taxonomy), // trx_addons_add_to_url( trx_addons_woocommerce_get_shop_page_link(), array( $taxonomy => $k ) )
"css" => ""
) );
}
trx_addons_show_layout( trx_addons_sc_button( array( 'buttons' => $buttons ) ), '<div class="trx_addons_woocommerce_child_categories">', '</div>' );
}
}
trx_addons_sc_layouts_showed('child_categories', true);
}
}
}
// Load required scripts and styles
//------------------------------------------------------------------------
if ( ! function_exists( 'trx_addons_woocommerce_not_defer_scripts' ) ) {
add_filter( "trx_addons_filter_skip_move_scripts_down", 'trx_addons_woocommerce_not_defer_scripts' );
add_filter( "trx_addons_filter_skip_async_scripts_load", 'trx_addons_woocommerce_not_defer_scripts' );
/**
* Add plugin-specific slugs to the list of scripts that should not be deferred or loaded asynchronously
*
* @hooked trx_addons_filter_skip_move_scripts_down
* @hooked trx_addons_filter_skip_async_scripts_load
*
* @param array $list List of scripts to skip defer/async
*
* @return array Modified list
*/
function trx_addons_woocommerce_not_defer_scripts( $list ) {
if ( trx_addons_exists_woocommerce() ) {
$list[] = 'js.cookie';
}
return $list;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_load_scripts_front' ) ) {
add_action( "wp_enqueue_scripts", 'trx_addons_woocommerce_load_scripts_front', TRX_ADDONS_ENQUEUE_SCRIPTS_PRIORITY );
add_action( 'trx_addons_action_pagebuilder_preview_scripts', 'trx_addons_woocommerce_load_scripts_front', 10, 1 );
/**
* Enqueue custom styles and scripts for the frontend for WooCommerce
*
* @hooked wp_enqueue_scripts
* @hooked trx_addons_action_pagebuilder_preview_scripts
*
* @trigger trx_addons_action_load_scripts_front
*
* @param boolean $force Load styles and scripts always, not only if plugin is added to the page
*/
function trx_addons_woocommerce_load_scripts_front( $force = false ) {
if ( ! trx_addons_exists_woocommerce() ) {
return;
}
trx_addons_enqueue_optimized( 'woocommerce', $force, array(
'css' => array(
'trx_addons-woocommerce' => array( 'src' => TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.css' ),
),
'js' => array(
'trx_addons-woocommerce' => array( 'src' => TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.js', 'deps' => 'jquery' ),
),
'need' => trx_addons_is_woocommerce_page(),
'check' => array(
//array( 'type' => 'gb', 'sc' => 'wp:trx-addons/events' ), // This sc is not exists for GB
// Core WooCommerce shortcodes
array( 'type' => 'sc', 'sc' => 'product' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[product' ),
array( 'type' => 'sc', 'sc' => 'product_page' ),
array( 'type' => 'sc', 'sc' => 'product_category' ),
array( 'type' => 'sc', 'sc' => 'product_categories' ),
array( 'type' => 'sc', 'sc' => 'product_add_to_cart' ),
array( 'type' => 'sc', 'sc' => 'product_add_to_cart_url' ),
array( 'type' => 'sc', 'sc' => 'product_attribute' ),
array( 'type' => 'sc', 'sc' => 'recent_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[recent_products' ),
array( 'type' => 'sc', 'sc' => 'sale_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[sale_products' ),
array( 'type' => 'sc', 'sc' => 'best_selling_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[best_selling_products' ),
array( 'type' => 'sc', 'sc' => 'top_rated_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[top_rated_products' ),
array( 'type' => 'sc', 'sc' => 'featured_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[featured_products' ),
array( 'type' => 'sc', 'sc' => 'related_products' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[related_products' ),
array( 'type' => 'sc', 'sc' => 'shop_messages' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[shop_messages' ),
array( 'type' => 'sc', 'sc' => 'order_tracking' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[order_tracking' ),
array( 'type' => 'sc', 'sc' => 'cart' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[cart' ),
array( 'type' => 'sc', 'sc' => 'checkout' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[checkout' ),
array( 'type' => 'sc', 'sc' => 'my_account' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[my_account' ),
// Our shortcodes and widgets
array( 'type' => 'sc', 'sc' => 'trx_sc_extended_products' ),
array( 'type' => 'elm', 'sc' => '"widgetType":"trx_sc_extended_products"' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[trx_sc_extended_products' ),
array( 'type' => 'sc', 'sc' => 'trx_widget_woocommerce_search' ),
array( 'type' => 'elm', 'sc' => '"widgetType":"trx_widget_woocommerce_search"' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[trx_widget_woocommerce_search' ),
array( 'type' => 'sc', 'sc' => 'trx_widget_woocommerce_title' ),
array( 'type' => 'elm', 'sc' => '"widgetType":"trx_widget_woocommerce_title"' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[trx_widget_woocommerce_title' ),
array( 'type' => 'gb', 'sc' => 'wp:trx-addons/woocommerce-title' ),
// Shortcodes from the plugin "WC Product Table Pro"
array( 'type' => 'sc', 'sc' => 'product_table' ),
array( 'type' => 'elm', 'sc' => '"shortcode":"[product_table' ),
)
) );
}
}
if ( ! function_exists( 'trx_addons_woocommerce_load_scripts_front_responsive' ) ) {
add_action( 'wp_enqueue_scripts', 'trx_addons_woocommerce_load_scripts_front_responsive', TRX_ADDONS_ENQUEUE_RESPONSIVE_PRIORITY );
add_action( 'trx_addons_action_load_scripts_front_woocommerce', 'trx_addons_woocommerce_load_scripts_front_responsive', 10, 1 );
/**
* Load responsive styles for the frontend for WooCommerce
*
* @hooked wp_enqueue_scripts
* @hooked trx_addons_action_load_scripts_front_woocommerce
*
* @param bool $force Load responsive styles even if it's not necessary
*/
function trx_addons_woocommerce_load_scripts_front_responsive( $force = false ) {
if ( ! trx_addons_exists_woocommerce() ) {
return;
}
trx_addons_enqueue_optimized_responsive( 'woocommerce', $force, array(
'css' => array(
'trx_addons-woocommerce-responsive' => array(
'src' => TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.responsive.css',
'media' => 'lg'
),
),
) );
}
}
if ( ! function_exists( 'trx_addons_woocommerce_merge_styles' ) ) {
add_filter( 'trx_addons_filter_merge_styles', 'trx_addons_woocommerce_merge_styles' );
/**
* Add WooCommerce styles to the list of merged styles
*
* @hooked trx_addons_filter_merge_styles
*
* @param array $list List of stylesheets to merge. Use URL as key and true|false as value to load or not load this stylesheet
* always or only if the plugin is present on the current page.
*
* @return array Modified list
*/
function trx_addons_woocommerce_merge_styles( $list ) {
if ( trx_addons_exists_woocommerce() ) {
$list[ TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.css' ] = false;
}
return $list;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_merge_styles_responsive' ) ) {
add_filter( 'trx_addons_filter_merge_styles_responsive', 'trx_addons_woocommerce_merge_styles_responsive' );
/**
* Add WooCommerce responsive styles to the list of merged styles
*
* @hooked trx_addons_filter_merge_styles_responsive
*
* @param array $list List of stylesheets to merge. Use URL as key and true|false as value to load or not load this stylesheet
* always or only if the plugin is present on the current page.
*
* @return array Modified list
*/
function trx_addons_woocommerce_merge_styles_responsive( $list ) {
if ( trx_addons_exists_woocommerce() ) {
$list[ TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.responsive.css' ] = false;
}
return $list;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_merge_scripts' ) ) {
add_action( 'trx_addons_filter_merge_scripts', 'trx_addons_woocommerce_merge_scripts', 11 );
/**
* Add WooCommerce scripts to the list of merged scripts
*
* @hooked trx_addons_filter_merge_scripts
*
* @param array $list List of scripts to merge. Use URL as key and true|false as value to load or not load this script
* always or only if the plugin is present on the current page.
*
* @return array Modified list
*/
function trx_addons_woocommerce_merge_scripts( $list ) {
if ( trx_addons_exists_woocommerce() ) {
$list[ TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce.js' ] = false;
}
return $list;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_check_in_html_output' ) ) {
add_filter( 'trx_addons_filter_get_menu_cache_html', 'trx_addons_woocommerce_check_in_html_output', 10, 1 );
add_action( 'trx_addons_action_show_layout_from_cache', 'trx_addons_woocommerce_check_in_html_output', 10, 1 );
add_action( 'trx_addons_action_check_page_content', 'trx_addons_woocommerce_check_in_html_output', 10, 1 );
/**
* Check if WooCommerce is present in the specified HTML content and force load required styles and scripts
*
* @hooked trx_addons_filter_get_menu_cache_html
* @hooked trx_addons_action_show_layout_from_cache
* @hooked trx_addons_action_check_page_content
*
* @param string $content HTML content to check
*
* @return string Modified HTML content
*/
function trx_addons_woocommerce_check_in_html_output( $content = '' ) {
if ( ! trx_addons_exists_woocommerce() ) {
return $content;
}
$args = array(
'check' => array(
'<(div|ul|li)[^>]*class=[\'"][^\'"]*(woocommerce|wc\\-block\\-grid__product)',
// 'class=[\'"][^\'"]*sc_layouts_cart',
'class=[\'"][^\'"]*type\\-(product|product_variation|shop_coupon|shop_webhook)',
'class=[\'"][^\'"]*(product_type|product_visibility|product_cat|product_tag|product_shipping_class)\\-',
)
);
if ( trx_addons_check_in_html_output( 'woocommerce', $content, $args ) ) {
trx_addons_woocommerce_load_scripts_front( true );
}
return $content;
}
}
if ( ! function_exists( 'trx_addons_woocommerce_filter_head_output' ) ) {
add_filter( 'trx_addons_filter_page_head', 'trx_addons_woocommerce_filter_head_output', 10, 1 );
/**
* Remove WooCommerce styles and scripts from the page head if they are not used on the current page
* and optimize CSS/JS loading is enabled
*
* @hooked trx_addons_filter_page_head
*
* @trigger trx_addons_filter_remove_3rd_party_styles
*
* @param string $content Page head content
*
* @return string Modified page head content
*/
function trx_addons_woocommerce_filter_head_output( $content = '' ) {
if ( ! trx_addons_exists_woocommerce() ) {
return $content;
}
return trx_addons_filter_head_output( 'woocommerce', $content, array(
'check' => array(
'#<link[^>]*href=[\'"][^\'"]*/woocommerce/assets/[^>]*>#',
'#<style[^>]*id=[\'"]woocommerce-[^>]*>[\\s\\S]*</style>#U'
)
) );
}
}
if ( ! function_exists( 'trx_addons_woocommerce_filter_body_output' ) ) {
add_filter( 'trx_addons_filter_page_content', 'trx_addons_woocommerce_filter_body_output', 10, 1 );
/**
* Remove WooCommerce styles and scripts from the page body if they are not used on the current page
* and optimize CSS/JS loading is enabled
*
* @hooked trx_addons_filter_page_content
*
* @trigger trx_addons_filter_remove_3rd_party_styles
*
* @param string $content Page body content
*
* @return string Modified page body content
*/
function trx_addons_woocommerce_filter_body_output( $content = '' ) {
if ( ! trx_addons_exists_woocommerce() ) {
return $content;
}
return trx_addons_filter_body_output( 'woocommerce', $content, array(
'check' => array(
'#<link[^>]*href=[\'"][^\'"]*/woocommerce/assets/[^>]*>#',
'#<script[^>]*src=[\'"][^\'"]*/woocommerce/assets/[^>]*>[\\s\\S]*</script>#U',
'#<script[^>]*id=[\'"]woocommerce-[^>]*>[\\s\\S]*</script>#U',
'#<script[^>]*id=[\'"]wc-cart-[^>]*>[\\s\\S]*</script>#U',
'#<script[^>]*id=[\'"]wc-add-to-cart-[^>]*>[\\s\\S]*</script>#U',
)
) );
}
}
// Load WooCommerce Extended Attributes
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce-extended-attributes.php';
// Load WooCommerce Extended Shortcode 'Products'
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce-extended-products.php';
// Load WooCommerce Search Widget
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/widget.woocommerce_search.php';
// Load WooCommerce Title Widget
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce_title/widget.woocommerce_title.php';
// Add Elementor's support
if ( trx_addons_exists_woocommerce() && trx_addons_exists_elementor() ) {
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce-sc-elementor.php';
}
// Demo data install
//----------------------------------------------------------------------------
// One-click import support
if ( is_admin() ) {
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce-demo-importer.php';
}
// OCDI support
if ( is_admin() && trx_addons_exists_woocommerce() && function_exists( 'trx_addons_exists_ocdi' ) && trx_addons_exists_ocdi() ) {
require_once TRX_ADDONS_PLUGIN_DIR . TRX_ADDONS_PLUGIN_API . 'woocommerce/woocommerce-demo-ocdi.php';
}