add_filter( 'elementor/widgets/wordpress/widget_args', [ $this, 'woocommerce_wordpress_widget_css_class' ], 10, 2 );
add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
// Make the Logout redirect go to our my account widget page instead of the set My Account Page.
add_action( 'init', [ $this, 'elementor_wc_my_account_logout' ], 5 );
add_filter( 'elementor_pro/editor/localize_settings', [ $this, 'add_localize_data' ] );
add_action( 'wp', [ $this, 'maybe_define_woocommerce_checkout' ] );
add_filter( 'woocommerce_get_endpoint_url', [ $this, 'get_order_received_endpoint_url' ], 10, 3 );
// Filters for messages on the Shipping calculator
add_filter( 'woocommerce_shipping_may_be_available_html', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-shipping-may-be-available-html e-checkout-message e-cart-content' );
}, 10, 1 );
add_filter( 'woocommerce_shipping_not_enabled_on_cart_html', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-shipping-not_enabled-on-cart-html e-checkout-message e-cart-content' );
}, 10, 1 );
add_filter( 'woocommerce_shipping_estimate_html', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-shipping-estimate-html e-checkout-message e-cart-content' );
}, 10, 1 );
add_filter( 'woocommerce_cart_no_shipping_available_html', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-cart-no-shipping-available-html e-checkout-message e-cart-content' );
}, 10, 1 );
add_filter( 'woocommerce_no_available_payment_methods_message', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-no-available-payment-methods-message e-description' );
}, 10, 1 );
add_filter( 'woocommerce_no_shipping_available_html', function ( $html ) {
return $this->print_woocommerce_shipping_message( $html, 'woocommerce-no-shipping-available-html e-checkout-message' );
}, 10, 1 );
add_action( 'woocommerce_add_to_cart', [ $this, 'localize_added_to_cart_on_product_single' ] );
foreach ( LoopBuilderModule::LOOP_WIDGETS as $widget_type ) {
add_action( 'elementor/widget/' . $widget_type . '/skins_init', function( Widget_Base $widget ) {
$widget->add_skin( new Skin_Loop_Product( $widget ) );
} );
add_action( 'elementor/widget/' . $widget_type . '/skins_init', function ( Widget_Base $widget ) {
$widget->add_skin( new Skin_Loop_Product_Taxonomy( $widget ) );
}, 13 );
}
// WooCommerce Notice Site Settings
add_filter( 'body_class', [ $this, 'e_notices_body_classes' ] );
add_filter( 'wp_enqueue_scripts', [ $this, 'e_notices_css' ] );
add_action( 'enqueue_block_editor_assets', [ $this, 'custom_gutenberg_woocommerce_notice' ] );
add_filter( 'elementor/query/query_args', function( $query_args, $widget ) {
return $this->loop_query( $query_args, $widget );
}, 10, 2 );
add_filter( 'woocommerce_rest_prepare_system_status', function( $response, $system_status, $request ) {
return $this->add_system_status_data( $response, $system_status, $request );
}, 10, 3 );
add_filter( 'elementor/editor/localize_settings', function ( $config ) {
return $this->populate_persistent_settings( $config );
});
}
public function add_system_status_data( $response, $system_status, $request ) {
foreach ( $response->data['pages'] as $index => $wc_page ) {
$this->modify_response_if_widget_exists_in_page( $wc_page, $response, $index );
}
return $response;
}
private function modify_response_if_widget_exists_in_page( $wc_page, &$response, $index ) {
if ( empty( $wc_page['page_name'] ) || empty( $wc_page['page_id'] ) || ! array_key_exists( $wc_page['page_name'], static::WC_STATUS_PAGES_MAPPED_TO_WIDGETS ) ) {
return;
}
if ( isset( $wc_page['shortcode_present'] ) && false !== $wc_page['shortcode_present'] ) {
return;
}
$document = Plugin::elementor()->documents->get( $wc_page['page_id'] );
if ( ! $document || ! $document->is_built_with_elementor() ) {
return;
}
$elementor_data = get_post_meta( $wc_page['page_id'], '_elementor_data', true );
$widget_name = static::WC_STATUS_PAGES_MAPPED_TO_WIDGETS[ $wc_page['page_name'] ];
$widget_exists_in_page = false !== strpos( $elementor_data, $widget_name );
if ( $widget_exists_in_page ) {
$response->data['pages'][ $index ]['shortcode_present'] = true;
}
}
public function loop_query( $query_args, $widget ) {
if ( ! $this->is_product_query( $widget ) ) {
return $query_args;
}
return $this->parse_loop_query_args( $widget, $query_args );
}
private function is_product_query( $widget ) {
$widget_config = $widget->get_config();
return ( ! empty( $widget_config['is_loop'] ) && 'product' === $widget->get_current_skin_id() );
}
private function parse_loop_query_args( $widget, $query_args ) {
$settings = $this->adjust_setting_for_product_renderer( $widget );
// For Products_Renderer.
if ( ! isset( $GLOBALS['post'] ) ) {
$GLOBALS['post'] = null; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
}
$shortcode = Products_Widget::get_shortcode_object( $settings );
$parsed_query_args = $shortcode->parse_query_args();
unset( $parsed_query_args['fields'] );
$override_various_query_args = array_filter( $query_args, function( $key ) {
return in_array( $key, [ 'posts_per_page', 'offset', 'paged' ], true );
}, ARRAY_FILTER_USE_KEY );
return wp_parse_args( $override_various_query_args, $parsed_query_args );
}
private function adjust_setting_for_product_renderer( $widget ) {
$settings = $widget->get_settings_for_display();
$query_name = $widget->get_query_name();
$unique_query_settings = array_filter( $settings, function( $key ) use ( $query_name ) {
return 0 === strpos( $key, $query_name );
}, ARRAY_FILTER_USE_KEY );
$query_settings = [];
foreach ( $unique_query_settings as $key => $value ) {
$query_settings[ 'query' . str_replace( $query_name, '', $key ) ] = $value;
}
$settings = array_merge( $settings, $query_settings );
if ( isset( $settings['posts_per_page'] ) && isset( $settings['columns'] ) ) {
$settings['rows'] = ceil( $settings['posts_per_page'] / $settings['columns'] );
}
$settings['paginate'] = 'yes';
$settings['allow_order'] = 'no';
$settings['show_result_count'] = 'no';
$settings['query_fields'] = false;
return $settings;
}
/**
* @param $post_id
* @return bool
*/
private function is_source_set_to_products( $post_id ) {
return 'product' === get_post_meta( $post_id, '_elementor_source', true );
}
/**
* @param array $config
* @return array
*/
private function add_woocommerce_widgets_to_recommended( array $config ) {
foreach ( static::RECOMMENDED_POSTS_WIDGET_NAMES as $recommended_posts_widget_name ) {
$config['panel']['widgets_settings'][ $recommended_posts_widget_name ] = [
'categories' => [ 'recommended' ],
'show_in_panel' => true,
];
}
return $config;
}
private function hide_woocommerce_widgets_in_loop_document( array $config ) {
$config['panel']['widgets_settings']['woocommerce-product-images'] = [
'show_in_panel' => false,
];
return $config;
}
private function populate_persistent_settings( array $config ) {
$config['persistent_keys'] = array_key_exists( 'persistent_keys', $config ) ?
array_merge( $config['persistent_keys'], self::WC_PERSISTENT_SITE_SETTINGS ) :
self::WC_PERSISTENT_SITE_SETTINGS;
return $config;
}
}
Fatal error: Uncaught Error: Class '\ElementorPro\Modules\Woocommerce\Module' not found in /home/sportuga/public_html/wp-content/plugins/pro-elements/core/modules-manager.php:82
Stack trace:
#0 /home/sportuga/public_html/wp-content/plugins/pro-elements/plugin.php(356): ElementorPro\Core\Modules_Manager->__construct()
#1 /home/sportuga/public_html/wp-includes/class-wp-hook.php(324): ElementorPro\Plugin->on_elementor_init('')
#2 /home/sportuga/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array)
#3 /home/sportuga/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#4 /home/sportuga/public_html/wp-content/plugins/elementor/includes/plugin.php(658): do_action('elementor/init')
#5 /home/sportuga/public_html/wp-includes/class-wp-hook.php(324): Elementor\Plugin->init('')
#6 /home/sportuga/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array)
#7 /home/sportuga/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#8 /home/sportuga/public_html in /home/sportuga/public_html/wp-content/plugins/pro-elements/core/modules-manager.php on line 82