Файловый менеджер - Редактировать - /var/www/xthruster/html/wp-content/plugins/elementor-pro/modules/woocommerce/widgets/add-to-cart.php
Назад
<?php namespace ElementorPro\Modules\Woocommerce\Widgets; use Elementor\Controls_Manager; use Elementor\Widget_Button; use ElementorPro\Base\Base_Widget_Trait; use ElementorPro\Core\Utils; use ElementorPro\Modules\QueryControl\Module; use ElementorPro\Modules\Woocommerce\Traits\Product_Id_Trait; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Add_To_Cart extends Widget_Button { use Base_Widget_Trait; use Product_Id_Trait; public function get_name() { return 'wc-add-to-cart'; } public function get_title() { return esc_html__( 'Custom Add To Cart', 'elementor-pro' ); } public function get_icon() { return 'eicon-woocommerce'; } public function get_categories() { return [ 'woocommerce-elements' ]; } public function get_keywords() { return [ 'woocommerce', 'shop', 'store', 'cart', 'product', 'button', 'add to cart' ]; } /** * Get style dependencies. * * Retrieve the list of style dependencies the widget requires. * * @since 3.24.0 * @access public * * @return array Widget style dependencies. */ public function get_style_depends(): array { return [ 'widget-woocommerce-product-add-to-cart' ]; } public function on_export( $element ) { unset( $element['settings']['product_id'] ); return $element; } public function unescape_html( $safe_text, $text ) { return $text; } protected function register_controls() { $this->start_controls_section( 'section_product', [ 'label' => esc_html__( 'Product', 'elementor-pro' ), ] ); $this->add_control( 'product_id', [ 'label' => esc_html__( 'Product', 'elementor-pro' ), 'type' => Module::QUERY_CONTROL_ID, 'options' => [], 'label_block' => true, 'autocomplete' => [ 'object' => Module::QUERY_OBJECT_POST, 'query' => [ 'post_type' => [ 'product' ], ], ], ] ); $this->add_control( 'show_quantity', [ 'label' => esc_html__( 'Show Quantity', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_off' => esc_html__( 'Hide', 'elementor-pro' ), 'label_on' => esc_html__( 'Show', 'elementor-pro' ), 'description' => esc_html__( 'Please note that switching on this option will disable some of the design controls.', 'elementor-pro' ), ] ); $this->add_control( 'quantity', [ 'label' => esc_html__( 'Quantity', 'elementor-pro' ), 'type' => Controls_Manager::NUMBER, 'default' => 1, 'condition' => [ 'show_quantity' => '', ], ] ); $this->end_controls_section(); parent::register_controls(); $this->start_controls_section( 'section_layout', [ 'label' => esc_html__( 'Layout', 'elementor-pro' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'layout', [ 'label' => esc_html__( 'Layout', 'elementor-pro' ), 'type' => Controls_Manager::SELECT, 'options' => [ '' => esc_html__( 'Inline', 'elementor-pro' ), 'stacked' => esc_html__( 'Stacked', 'elementor-pro' ), 'auto' => esc_html__( 'Auto', 'elementor-pro' ), ], 'prefix_class' => 'elementor-add-to-cart--layout-', 'render_type' => 'template', ] ); $this->end_controls_section(); $this->update_control( 'link', [ 'type' => Controls_Manager::HIDDEN, 'default' => [ 'url' => '', ], ] ); $this->update_control( 'text', [ 'default' => esc_html__( 'Add to Cart', 'elementor-pro' ), 'placeholder' => esc_html__( 'Add to Cart', 'elementor-pro' ), ] ); $this->update_responsive_control( 'align', [ 'prefix_class' => 'elementor-add-to-cart%s--align-', ] ); $this->update_control( 'selected_icon', [ 'default' => [ 'value' => 'fas fa-shopping-cart', 'library' => 'fa-solid', ], ] ); $this->update_control( 'size', [ 'condition' => [ 'show_quantity' => '', ], ] ); } protected function render() { $settings = $this->get_settings_for_display(); if ( ! empty( $settings['product_id'] ) ) { $product_id = $settings['product_id']; } elseif ( wp_doing_ajax() && ! empty( $settings['product_id'] ) ) { // PHPCS - No nonce is required. // phpcs:ignore WordPress.Security.NonceVerification.Missing $product_id = (int) Utils::_unstable_get_super_global_value( $_POST, 'post_id' ); } else { $product_id = get_queried_object_id(); } global $product; $product = $this->get_product( $product_id ); $settings = $this->get_settings_for_display(); if ( in_array( $settings['layout'], [ 'auto', 'stacked' ], true ) ) { add_action( 'woocommerce_before_add_to_cart_quantity', [ $this, 'before_add_to_cart_quantity' ], 95 ); add_action( 'woocommerce_after_add_to_cart_button', [ $this, 'after_add_to_cart_button' ], 5 ); } if ( 'yes' === $settings['show_quantity'] ) { $this->render_form_button( $product ); } else { $this->render_ajax_button( $product ); } if ( in_array( $settings['layout'], [ 'auto', 'stacked' ], true ) ) { remove_action( 'woocommerce_before_add_to_cart_quantity', [ $this, 'before_add_to_cart_quantity' ], 95 ); remove_action( 'woocommerce_after_add_to_cart_button', [ $this, 'after_add_to_cart_button' ], 5 ); } } /** * Before Add to Cart Quantity * * Added wrapper tag around the quantity input and "Add to Cart" button * used to more solidly accommodate the layout when additional elements * are added by 3rd party plugins. * * @since 3.6.0 */ public function before_add_to_cart_quantity() { ?> <div class="e-atc-qty-button-holder"> <?php } /** * After Add to Cart Quantity * * @since 3.6.0 */ public function after_add_to_cart_button() { ?> </div> <?php } /** * @param \WC_Product $product */ private function render_ajax_button( $product ) { $settings = $this->get_settings_for_display(); if ( $product ) { if ( version_compare( WC()->version, '3.0.0', '>=' ) ) { $product_type = $product->get_type(); } else { $product_type = $product->product_type; } $class = implode( ' ', array_filter( [ 'product_type_' . $product_type, $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '', $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '', ] ) ); $this->add_render_attribute( 'button', [ 'rel' => 'nofollow', 'href' => $product->add_to_cart_url(), 'data-quantity' => ( isset( $settings['quantity'] ) ? $settings['quantity'] : 1 ), 'data-product_id' => $product->get_id(), 'class' => $class, ] ); } elseif ( current_user_can( 'manage_options' ) ) { $settings['text'] = esc_html__( 'Please set a valid product', 'elementor-pro' ); $this->set_settings( $settings ); } parent::render(); } private function render_form_button( $product ) { if ( ! $product && current_user_can( 'manage_options' ) ) { echo esc_html__( 'Please set a valid product', 'elementor-pro' ); return; } $text_callback = function() { ob_start(); $this->render_text(); return ob_get_clean(); }; add_filter( 'woocommerce_get_stock_html', '__return_empty_string' ); add_filter( 'woocommerce_product_single_add_to_cart_text', $text_callback ); add_filter( 'esc_html', [ $this, 'unescape_html' ], 10, 2 ); ob_start(); woocommerce_template_single_add_to_cart(); $form = ob_get_clean(); $form = str_replace( 'single_add_to_cart_button', 'single_add_to_cart_button elementor-button', $form ); // PHPCS - The HTML from 'woocommerce_template_single_add_to_cart' is safe. echo $form; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped remove_filter( 'woocommerce_product_single_add_to_cart_text', $text_callback ); remove_filter( 'woocommerce_get_stock_html', '__return_empty_string' ); remove_filter( 'esc_html', [ $this, 'unescape_html' ] ); } /** * Written as a Backbone JavaScript template and used to generate the live preview. * * @since 2.9.0 * @access protected */ // Force remote render protected function content_template() {} public function get_group_name() { return 'woocommerce'; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.3-4ubuntu2.24 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка