rtsb_name = esc_html__( 'Product add to cart', 'shopbuilder' ); $this->rtsb_base = 'rtsb-product-add-to-cart'; parent::__construct( $data, $args ); } /** * Widget Field * * @return array */ public function widget_fields() { if ( Fns::is_catalog_mode() ) { return CatalogButtonSettings::settings( $this ); } else { return AddToCartSettings::widget_fields( $this ); } } /** * Set Widget Keyword. * * @return array */ public function get_keywords() { return [ 'Cart' ] + parent::get_keywords(); } /** * Widget Field. * * @return void */ public function the_hooks() { $controllers = $this->get_settings_for_display(); add_filter( 'rtsb/module/flash_sale_countdown/show_counter', '__return_false', 99 ); $product = Fns::get_product(); $is_visible_qty = Fns::is_visible_qty_input( $product ); if ( ! empty( $controllers['quantity_style'] ) && $is_visible_qty ) { if ( in_array( $controllers['quantity_style'], [ 'style-1', 'style-2' ], true ) ) { add_action( 'woocommerce_before_quantity_input_field', [ $this, 'quantity_wrapper_start' ] ); add_action( 'woocommerce_after_quantity_input_field', [ $this, 'quantity_wrapper_end' ] ); } if ( in_array( $controllers['quantity_style'], [ 'style-3', 'style-4' ], true ) && $is_visible_qty ) { add_action( 'woocommerce_before_quantity_input_field', [ $this, 'quantity_wrapper_with_inner_border' ] ); add_action( 'woocommerce_after_quantity_input_field', [ $this, 'close_quantity_wrapper' ] ); } } 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', [ $this, 'override_ajax_variation_threshold' ], 99 ); } } /** * Start quantity wrapper. * * @return void */ public function reset_hooks() { $controllers = $this->get_settings_for_display(); $product = Fns::get_product(); $is_visible_qty = Fns::is_visible_qty_input( $product ); if ( ! empty( $controllers['quantity_style'] ) && $is_visible_qty ) { if ( in_array( $controllers['quantity_style'], [ 'style-1', 'style-2' ], true ) ) { remove_action( 'woocommerce_before_quantity_input_field', [ $this, 'quantity_wrapper_start' ] ); remove_action( 'woocommerce_after_quantity_input_field', [ $this, 'quantity_wrapper_end' ] ); } if ( in_array( $controllers['quantity_style'], [ 'style-3', 'style-4' ], true ) && $is_visible_qty ) { remove_action( 'woocommerce_before_quantity_input_field', [ $this, 'quantity_wrapper_with_inner_border' ] ); remove_action( 'woocommerce_after_quantity_input_field', [ $this, 'close_quantity_wrapper' ] ); } } } /** * Start quantity wrapper. * * @return void */ public function quantity_wrapper_start() { $controllers = $this->get_settings_for_display(); ?>
get_settings_for_display(); ?>
get_settings_for_display(); $inner_border = ! empty( $controllers['show_inner_border'] ) ? 'show-inner-border' : ''; ?>
'; echo '
'; foreach ( $contact_buttons as $button_type ) { $this->render_contact_button( $button_type, $product_id, $settings ); } echo '
'; echo ''; } /** * Render specific contact button * * @param string $button_type Button type. * @param int $product_id Product ID. * @param array $settings Plugin settings. * @return void */ public function render_contact_button( $button_type, $product_id, $settings ) { switch ( $button_type ) { case 'custom': CatalogModeFrontEnd::render_custom_button( $product_id, $settings ); break; case 'whatsapp': CatalogModeFrontEnd::render_whatsapp_button( $product_id, $settings ); break; case 'call': CatalogModeFrontEnd::render_call_button( $settings ); break; case 'email': CatalogModeFrontEnd::render_email_button( $settings ); break; case 'inquiry': CatalogModeFrontEnd::render_inquiry_button( $product_id, $settings ); break; } } /** * Show an editor-only notice when the add to cart button is hidden * because the product is out of stock. * * @param \WC_Product|null $product Current product. * @return void */ public function out_of_stock_editor_notice( $product ) { if ( ! $product instanceof \WC_Product || $product->is_in_stock() ) { return; } $this->editor_notice( esc_html__( 'The add to cart button and quantity are hidden because this product is out of stock.', 'shopbuilder' ), 'rtsb-add-to-cart-editor-notice' ); } /** * Override WooCommerce AJAX variation threshold. * * @return int */ public function override_ajax_variation_threshold() { return 1; } /** * Elementor Edit mode need some extra js for isotop reinitialize * * @return void */ public function editor_script() { if ( $this->is_edit_mode() ) { ?> get_settings_for_display(); $controllers['cart_icon_html'] = ! empty( $controllers['cart_icon'] ) ? Fns::icons_manager( $controllers['cart_icon'] ) : ''; $add_to_cart_visibility = rtsb()->has_pro() && Fns::is_guest_feature_disabled( 'hide_add_to_cart', '' ); $controllers['visibility'] = $add_to_cart_visibility ? ' rtsb-not-visible' : ' rtsb-is-visible'; $this->the_hooks(); $this->theme_support(); if ( rtsb()->has_pro() && ! empty( $controllers['enable_single_ajax_add_to_cart'] ) ) { wp_enqueue_script( 'wc-add-to-cart' ); } if ( Fns::is_back_in_stock_notifier_enable() ) { remove_filter( 'woocommerce_get_stock_html', [ BackInStockNotifierFrontEnd::instance(),'add_waitlist_to_stock_html' ], 20, 2 ); } $data = [ 'template' => 'elementor/single-product/add-to-cart', 'controllers' => $controllers, 'product_type' => $product ? $product->get_type() : '', ]; if ( $this->is_builder_mode() && Fns::is_catalog_mode() ) { $this->catalog_mode_buttons( $product->get_id() ); } else { Fns::load_template( $data['template'], $data ); $this->out_of_stock_editor_notice( $product ); } $this->editor_cart_icon_script(); add_filter( 'rtsb/module/flash_sale_countdown/show_counter', '__return_true', 99 ); $this->reset_hooks(); $this->theme_support( 'render_reset' ); $this->editor_script(); $product = $_product; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } }