OwlCyberSecurity - MANAGER
Edit File: products.php
<?php namespace ElementorPro\Modules\Woocommerce\Widgets; use Elementor\Controls_Manager; use ElementorPro\Modules\QueryControl\Controls\Group_Control_Query; use ElementorPro\Modules\Woocommerce\Classes\Products_Renderer; use ElementorPro\Modules\Woocommerce\Classes\Current_Query_Renderer; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Products extends Products_Base { public function get_name() { return 'woocommerce-products'; } public function get_title() { return esc_html__( 'Products', 'elementor-pro' ); } public function get_icon() { return 'eicon-products'; } public function get_keywords() { return [ 'woocommerce', 'shop', 'store', 'product', 'archive' ]; } public function get_categories() { return [ 'woocommerce-elements', ]; } protected function register_query_controls() { $this->start_controls_section( 'section_query', [ 'label' => esc_html__( 'Query', 'elementor-pro' ), 'tab' => Controls_Manager::TAB_CONTENT, ] ); $this->add_group_control( Group_Control_Query::get_type(), [ 'name' => Products_Renderer::QUERY_CONTROL_NAME, 'post_type' => 'product', 'presets' => [ 'include', 'exclude', 'order' ], 'fields_options' => [ 'post_type' => [ 'default' => 'product', 'options' => [ 'current_query' => esc_html__( 'Current Query', 'elementor-pro' ), 'product' => esc_html__( 'Latest Products', 'elementor-pro' ), 'sale' => esc_html__( 'Sale', 'elementor-pro' ), 'featured' => esc_html__( 'Featured', 'elementor-pro' ), 'by_id' => _x( 'Manual Selection', 'Posts Query Control', 'elementor-pro' ), ], ], 'orderby' => [ 'default' => 'date', 'options' => [ 'date' => esc_html__( 'Date', 'elementor-pro' ), 'title' => esc_html__( 'Title', 'elementor-pro' ), 'price' => esc_html__( 'Price', 'elementor-pro' ), 'popularity' => esc_html__( 'Popularity', 'elementor-pro' ), 'rating' => esc_html__( 'Rating', 'elementor-pro' ), 'rand' => esc_html__( 'Random', 'elementor-pro' ), 'menu_order' => esc_html__( 'Menu Order', 'elementor-pro' ), ], ], 'exclude' => [ 'options' => [ 'current_post' => esc_html__( 'Current Post', 'elementor-pro' ), 'manual_selection' => esc_html__( 'Manual Selection', 'elementor-pro' ), 'terms' => esc_html__( 'Term', 'elementor-pro' ), ], ], 'include' => [ 'options' => [ 'terms' => esc_html__( 'Term', 'elementor-pro' ), ], ], ], 'exclude' => [ 'posts_per_page', 'exclude_authors', 'authors', 'offset', 'related_fallback', 'related_ids', 'query_id', 'avoid_duplicates', 'ignore_sticky_posts', ], ] ); $this->end_controls_section(); } protected function register_controls() { $this->start_controls_section( 'section_content', [ 'label' => esc_html__( 'Content', 'elementor-pro' ), ] ); $this->add_columns_responsive_control(); $this->add_control( 'rows', [ 'label' => esc_html__( 'Rows', 'elementor-pro' ), 'type' => Controls_Manager::NUMBER, 'default' => Products_Renderer::DEFAULT_COLUMNS_AND_ROWS, 'render_type' => 'template', 'range' => [ 'px' => [ 'max' => 20, ], ], ] ); $this->add_control( 'paginate', [ 'label' => esc_html__( 'Pagination', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', ] ); $this->add_control( 'allow_order', [ 'label' => esc_html__( 'Allow Order', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'condition' => [ 'paginate' => 'yes', ], ] ); $this->add_control( 'wc_notice_frontpage', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__( 'Ordering is not available if this widget is placed in your front page. Visible on frontend only.', 'elementor-pro' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', 'condition' => [ 'paginate' => 'yes', 'allow_order' => 'yes', ], ] ); $this->add_control( 'show_result_count', [ 'label' => esc_html__( 'Show Result Count', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'condition' => [ 'paginate' => 'yes', ], ] ); $this->end_controls_section(); $this->register_query_controls(); parent::register_controls(); } protected function get_shortcode_object( $settings ) { if ( 'current_query' === $settings[ Products_Renderer::QUERY_CONTROL_NAME . '_post_type' ] ) { $type = 'current_query'; return new Current_Query_Renderer( $settings, $type ); } $type = 'products'; return new Products_Renderer( $settings, $type ); } protected function render() { if ( WC()->session ) { wc_print_notices(); } // For Products_Renderer. if ( ! isset( $GLOBALS['post'] ) ) { $GLOBALS['post'] = null; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } $settings = $this->get_settings(); $shortcode = $this->get_shortcode_object( $settings ); $content = $shortcode->get_content(); if ( $content ) { $content = str_replace( '<ul class="products', '<ul class="products elementor-grid', $content ); // PHPCS - Woocommerce output echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif ( $this->get_settings( 'nothing_found_message' ) ) { echo '<div class="elementor-nothing-found elementor-products-nothing-found">' . esc_html( $this->get_settings( 'nothing_found_message' ) ) . '</div>'; } } public function render_plain_content() {} }