Advertisement
hmbashar

Main Widget with render

Jan 2nd, 2024 (edited)
862
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.62 KB | None | 0 0
  1. <?php
  2. namespace Includes\widgets\WooCommerce\ABCProductAddToCart;
  3.  
  4. if (!defined('ABSPATH')) exit; // Exit if accessed directly
  5.  
  6. use Includes\Widgets\BaseWidget;
  7. use Elementor\Controls_Manager;
  8. use Elementor\Group_Control_Background;
  9. use Elementor\Group_Control_Typography;
  10.  
  11. /**
  12.  * Elementor List Widget.
  13.  * @since 1.0.0
  14.  */
  15. class Main extends BaseWidget {
  16.  
  17.         // define protected variables...
  18.         protected $name = 'abcbiz-wc-add-to-cart';
  19.         protected $title = 'ABC Add to Cart';
  20.         protected $icon = 'eicon-product-add-to-cart';
  21.         protected $categories = [
  22.             'abcbiz-wc-category'
  23.         ];     
  24.         protected $keywords = [
  25.             'abc', 'product', 'add', 'cart'
  26.         ];
  27.  
  28.  
  29.     /**
  30.      * Register list widget controls.
  31.      */
  32.     protected function register_controls() {
  33.         //Template
  34.         $this->start_controls_section(
  35.             'abcbiz_elementor_wc_product_price',
  36.             [
  37.                 'label' => esc_html__( 'Style', 'abcbiz-multi' ),
  38.                 'tab' => Controls_Manager::TAB_CONTENT,
  39.             ]
  40.         );
  41.  
  42.         //Alignment
  43.         $this->add_responsive_control(
  44.             'abcbiz_elementor_wc_product_price_align',
  45.             [
  46.                 'label' => esc_html__( 'Alignment', 'abcbiz-multi'),
  47.                 'type' => Controls_Manager::CHOOSE,
  48.                 'default' => 'left',
  49.                 'options' => [
  50.                     'left'    => [
  51.                         'title' => esc_html__( 'Left', 'abcbiz-multi' ),
  52.                         'icon' => 'eicon-text-align-left',
  53.                     ],
  54.                     'center' => [
  55.                         'title' => esc_html__( 'Center', 'abcbiz-multi' ),
  56.                         'icon' => 'eicon-text-align-center',
  57.                     ],
  58.                     'right' => [
  59.                         'title' => esc_html__( 'Right', 'abcbiz-multi' ),
  60.                         'icon' => 'eicon-text-align-right',
  61.                     ],
  62.                 ],             
  63.                 'selectors' => [
  64.                     '{{WRAPPER}} .abcbiz-elementor-wc-product-price .price' => 'text-align: {{VALUE}}',
  65.                 ],
  66.             ]
  67.         );
  68.  
  69.         //Price Color regular
  70.         $this->add_control(
  71.             'abcbiz_elementor_wc_product_price_regular_color',
  72.             [
  73.                 'label' => esc_html__( 'Price Regular Color', 'abcbiz-multi' ),
  74.                 'type'  => Controls_Manager::COLOR,
  75.                 'default' => '#999999',
  76.                 'selectors' => [
  77.                     '{{WRAPPER}} .abcbiz-elementor-wc-product-price .price del bdi, {{WRAPPER}} .abcbiz-elementor-wc-product-price .price bdi' => 'color: {{VALUE}}',
  78.                 ],
  79.             ]
  80.         );
  81.  
  82.         //Price regular typoghraphy
  83.         $this->add_group_control(
  84.             Group_Control_Typography::get_type(),
  85.             [
  86.                 'name' => 'abcbiz_elementor_wc_product_price_regular_typography',
  87.                 'label' => esc_html__( 'Typography', 'abcbiz-multi' ),
  88.                 'selector' => '{{WRAPPER}} .abcbiz-elementor-wc-product-price .price del bdi, {{WRAPPER}} .abcbiz-elementor-wc-product-price .price bdi',
  89.             ]
  90.         );
  91.  
  92.  
  93.         //Price Color sales
  94.         $this->add_control(
  95.             'abcbiz_elementor_wc_product_price_sales_color',
  96.             [
  97.                 'label' => esc_html__( 'Price Sales Color', 'abcbiz-multi' ),
  98.                 'type'  => Controls_Manager::COLOR,
  99.                 'default' => '#333333',
  100.                 'selectors' => [
  101.                     '{{WRAPPER}} .abcbiz-elementor-wc-product-price .price ins bdi' => 'color: {{VALUE}}',
  102.                 ],
  103.             ]
  104.         );
  105.  
  106.         //Price sales typoghraphy
  107.         $this->add_group_control(
  108.             Group_Control_Typography::get_type(),
  109.             [
  110.                 'name' => 'abcbiz_elementor_wc_product_price_sales_typography',
  111.                 'label' => esc_html__( 'Typography', 'abcbiz-multi' ),
  112.                 'selector' => '{{WRAPPER}} .abcbiz-elementor-wc-product-price .price ins bdi',
  113.             ]
  114.         );
  115.  
  116.         $this->end_controls_section();
  117.        
  118.  
  119.     }
  120.    
  121.     public function before_add_to_cart_quantity() {
  122.         ?>
  123.         <div class="abcbiz-wc-qty-button-holder">
  124.         <?php
  125.     }
  126.  
  127.     /**
  128.      * After Add to Cart Quantity
  129.      *
  130.      * @since 3.6.0
  131.      */
  132.     public function after_add_to_cart_button() {
  133.         ?>
  134.         </div>
  135.         <div id="acbbiz-add-to-cart-message"></div>
  136.         <?php
  137.     }
  138.  
  139.     public function unescape_html( $safe_text, $text ) {
  140.         return $text;
  141.     }
  142.  
  143.     private function render_form_button( $product ) {
  144.         if ( ! $product && current_user_can( 'manage_options' ) ) {
  145.             echo esc_html__( 'Please set a valid product', 'abcbiz-multi' );
  146.             return;
  147.         }
  148.    
  149.         $text_callback = function() {
  150.             ob_start();          
  151.             echo esc_html__('Add to cart', 'abcbiz-multi');          
  152.             return ob_get_clean();
  153.         };
  154.    
  155.         add_filter( 'woocommerce_product_single_add_to_cart_text', $text_callback );
  156.         add_filter( 'esc_html', [ $this, 'unescape_html' ], 10, 2 );
  157.    
  158.         ob_start();
  159.         woocommerce_template_single_add_to_cart();
  160.         $form = ob_get_clean();
  161.    
  162.         // Add the data-product_id attribute
  163.         $product_id = $product->get_id();
  164.         $replacement = 'single_add_to_cart_button elementor-button abcbiz_add_to_cart button alt" data-product_id="' . esc_attr($product_id) . '"';
  165.         $form = str_replace( 'single_add_to_cart_button', $replacement, $form );
  166.    
  167.         echo $form; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
  168.     }
  169.    
  170.  
  171.  
  172.     public function get_product( $product_id = false ) {
  173.         if ( 'product_variation' === get_post_type() ) {
  174.             return $this->get_product_variation( $product_id );
  175.         }
  176.  
  177.         $product = wc_get_product( $product_id );
  178.  
  179.         if ( ! $product ) {
  180.             $product = wc_get_product();
  181.         }
  182.  
  183.         return $product;
  184.     }
  185.  
  186.     public function get_product_variation( $product_id = false ) {
  187.         return wc_get_product( get_the_ID() );
  188.     }
  189.     /**
  190.      * Render the widget output on the frontend.
  191.      */
  192.     protected function render()
  193.     {
  194.         $settings = $this->get_settings_for_display();
  195.  
  196.         $product_id = get_queried_object_id();
  197.  
  198.         global $product;
  199.         $product = $this->get_product( $product_id );
  200.        
  201.             add_action( 'woocommerce_before_add_to_cart_quantity', [ $this, 'before_add_to_cart_quantity' ], 95 );
  202.             add_action( 'woocommerce_after_add_to_cart_button', [ $this, 'after_add_to_cart_button' ], 5 );
  203.                
  204.             $this->render_form_button( $product );         
  205.        
  206.  
  207.         //include 'renderview.php';
  208.     }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement