loop_settings = new ProductsSettings( $this ); $slider_control = $this->has_slider ? SliderSettings::slider_controls() : []; $slider_style = $this->has_slider ? SliderSettings::slider_style( $this ) : []; $heading = $this->has_title ? $this->loop_settings->heading_controls() : []; $pagination = $this->has_pagination ? $this->loop_settings->pagination() : []; return $this->general_section() + $this->loop_settings->widget_icons() + $slider_control + $heading + $this->loop_settings->image_section() + $this->loop_settings->product_title() + $this->loop_settings->product_price() + $this->loop_settings->flash_sale() + ReviewsStarSettings::widget_fields( $this ) + $this->loop_settings->add_to_cart() + $this->loop_settings->module_button_style() + $slider_style + $pagination + StyleFields::not_found_notice( $this ); } /** * Widget Field * * @return array */ public function general_section() { $fields = $this->loop_settings->general_section(); if ( 'rtsb-related-product' === $this->rtsb_base ) { unset( $fields['orderby'] ); unset( $fields['order'] ); } if ( 'rtsb-products-archive' === $this->rtsb_base ) { unset( $fields['posts_per_page'] ); unset( $fields['columns'] ); unset( $fields['orderby'] ); unset( $fields['order'] ); } return $fields; } /** * Widget Field. * * @return void */ public function script_init() { $handle = Fns::optimized_handle( 'rtsb-public' ); wp_dequeue_script( $handle ); wp_enqueue_script( 'swiper' ); wp_enqueue_script( $handle ); } /** * Product loop start function * * @param string $html html. * * @return string */ public function product_loop_start( $html = '' ) { $str = explode( 'products', $html ); if ( is_array( $str ) && count( $str ) > 1 ) { $html = $str[0] . ' products swiper-wrapper ' . $str[1]; } $controllers = $this->get_settings_for_display(); $swiper_data = [ // Optional parameters. 'wrapperClass' => 'products', 'slideClass' => 'product', 'slidesPerView' => 4, 'slidesPerGroup' => 3, 'spaceBetween' => 15, 'loop' => false, ]; $classes = []; if ( ! empty( $controllers['columns'] ) ) { $swiper_data['slidesPerView'] = absint( $controllers['columns'] ); $swiper_data['slidesPerGroup'] = absint( $controllers['columns'] ); } if ( ! empty( $controllers['space_between'] ) ) { $swiper_data['spaceBetween'] = absint( $controllers['space_between'] ); } if ( ! empty( $controllers['loop'] ) ) { $swiper_data['loop'] = boolval( $controllers['loop'] ); } if ( ! empty( $controllers['autoplay'] ) ) { $swiper_data['autoplay']['delay'] = absint( $controllers['autoplay_delay'] ); $swiper_data['autoplay']['pauseOnMouseEnter'] = boolval( $controllers['pauseon_mouseenter'] ); $swiper_data['autoplay']['disableOnInteraction'] = false; } if ( ! empty( $controllers['speed'] ) ) { $swiper_data['speed'] = absint( $controllers['speed'] ); } if ( ! empty( $controllers['show_arrows'] ) ) { $swiper_data['navigation'] = [ 'nextEl' => '.button-right', 'prevEl' => '.button-left', ]; $classes[] = 'has-navigation'; } if ( ! empty( $controllers['show_dots'] ) ) { $swiper_data['pagination'] = [ 'el' => '.rtsb-slider-pagination', 'type' => 'bullets', 'clickable' => true, ]; $classes[] = 'has-dots'; } $data = [ 'template' => 'global/slider-header', 'controllers' => $controllers, 'swiper_json_data' => wp_json_encode( $swiper_data ), 'classes' => $classes, ]; $new = Fns::load_template( $data['template'], $data, true ); $html = $new . $html; return $html; } /** * Product loop start function * * @param string $html html. * * @return string */ public function product_loop_end( $html ) { $controllers = $this->get_settings_for_display(); $data = [ 'template' => 'global/slider-footer', 'controllers' => $controllers, 'left_arrow' => Fns::icons_manager( $controllers['left_arrow_icon'] ), 'right_arrow' => Fns::icons_manager( $controllers['right_arrow_icon'] ), ]; $new = Fns::load_template( $data['template'], $data, true ); $html = $html . $new; return $html; } /** * Product loop start function * * @param string $classes classes. * * @return string */ public function post_class( $classes ) { $classes[] = 'swiper-slide'; return $classes; } /** * Image Wrapper. * * @return void */ public function image_wrapper() { if ( ! RenderHelpers::is_wrapper_needed() ) { return; } ?>
get_settings_for_display(); if ( empty( $controllers['show_rating'] ) ) { remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); add_filter( 'woocommerce_product_get_rating_html', '__return_false' ); } if ( empty( $controllers['show_flash_sale'] ) ) { add_filter( 'woocommerce_sale_flash', '__return_false' ); } if ( ! empty( $controllers['slider_activate'] ) ) { add_filter( 'woocommerce_product_loop_start', [ $this, 'product_loop_start' ] ); add_filter( 'woocommerce_product_loop_end', [ $this, 'product_loop_end' ] ); add_filter( 'woocommerce_post_class', [ $this, 'post_class' ], 10, 1 ); $this->script_init(); } if ( class_exists( 'WooProductVariationSwatches' ) ) { remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 5 ); remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 20 ); remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 8 ); remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 12 ); } // Remove Action Button. add_filter( 'rtsb/module/wishlist/show_button', '__return_false' ); add_filter( 'rtsb/module/quick_view/show_button', '__return_false' ); add_filter( 'rtsb/module/compare/show_button', '__return_false' ); if ( empty( $controllers['show_quick_checkout'] ) ) { add_filter( 'rtsb/module/quick_checkout/show_button', '__return_false' ); } if ( empty( $controllers['show_flash_sale_countdown'] ) ) { add_filter( 'rtsb/module/flash_sale_countdown/show_counter', '__return_false' ); } // Default Link remove. remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); // Image Wrapper open. add_action( 'woocommerce_before_shop_loop_item', [ $this, 'image_wrapper' ], -1 ); // Image link. add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 9 ); add_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 11 ); // Image link end. // Title Link. add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 9 ); add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 11 ); // Title Link end. // Image Wrapper close. add_action( 'woocommerce_before_shop_loop_item_title', [ $this, 'div_close' ], 12 ); // Content Wrapper Open. add_action( 'woocommerce_before_shop_loop_item_title', [ $this, 'product_content_wrapper' ], 13 ); // Content Wrapper Close. add_action( 'woocommerce_after_shop_loop_item', [ $this, 'div_close' ], 99 ); if ( $this->is_edit_mode() ) { if ( class_exists( Rtwpvs\Controllers\Hooks::class ) ) { remove_filter( 'woocommerce_ajax_variationX_threshold', [ Rtwpvs\Controllers\Hooks::class, 'ajax_variation_threshold' ], 99 ); } add_filter( 'woocommerce_ajax_variation_threshold', function () { return 1; }, 99 ); } } /** * Apply hooks function. * * @return void */ public function apply_hooks_set_default() { // Default Link re active. add_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); // Image Wrapper open. remove_action( 'woocommerce_before_shop_loop_item', [ $this, 'image_wrapper' ], -1 ); // Image link. remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 9 ); remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 11 ); // Image link end. // Title Link. remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_open', 9 ); remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_link_close', 11 ); // Title Link End. // Image Wrapper close. remove_action( 'woocommerce_before_shop_loop_item_title', [ $this, 'div_close' ], 12 ); // Content Wrapper Open. remove_action( 'woocommerce_before_shop_loop_item_title', [ $this, 'product_content_wrapper' ], 13 ); // Content Wrapper Close. remove_action( 'woocommerce_after_shop_loop_item', [ $this, 'div_close' ], 99 ); // Remove Action Button. remove_filter( 'rtsb/module/wishlist/show_button', '__return_false' ); remove_filter( 'rtsb/module/quick_view/show_button', '__return_false' ); remove_filter( 'rtsb/module/compare/show_button', '__return_false' ); } /** * Related Product Args function' * * @param [type] $args argument. * @return array */ public function products_args( $args ) { $controllers = $this->get_settings_for_display(); if ( ! empty( $controllers['posts_per_page'] ) ) { $args['posts_per_page'] = intval( $controllers['posts_per_page'] ); } if ( ! empty( $controllers['columns'] ) ) { $args['columns'] = absint( $controllers['columns'] ); } if ( ! empty( $controllers['orderby'] ) ) { $args['orderby'] = $controllers['orderby']; } if ( ! empty( $controllers['order'] ) ) { $args['order'] = $controllers['order']; } return $args; } /** * Elementor Edit mode script * * @return void */ public function editor_script() { if ( ! $this->is_edit_mode() ) { return; } ?> template_data_arg(); if ( empty( $data['template'] ) ) { return; } $_product = $product; $product = Fns::get_product(); $controllers = $this->get_settings_for_display(); $controllers['cart_icon_html'] = Fns::icons_manager( $controllers['cart_icon'] ); $this->apply_hooks(); $this->theme_support(); $this->action_button_icon_modify(); $data['controllers'] = $controllers; Fns::load_template( $data['template'], $data ); $this->apply_hooks_set_default(); $this->action_button_icon_set_default(); $this->theme_support( 'render_reset' ); $product = $_product; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited if ( ! empty( $controllers['slider_activate'] ) ) { remove_filter( 'woocommerce_product_loop_start', [ $this, 'product_loop_start' ] ); remove_filter( 'woocommerce_product_loop_end', [ $this, 'product_loop_end' ] ); remove_filter( 'woocommerce_post_class', [ $this, 'post_class' ], 10, 1 ); $this->editor_slider_script(); } $this->editor_script(); $this->editor_cart_icon_script(); } }