mirror of
https://github.com/proelements/proelements.git
synced 2026-04-18 01:52:20 +00:00
v3.33.1
This commit is contained in:
292
modules/woocommerce/widgets/products-deprecated.php
Normal file
292
modules/woocommerce/widgets/products-deprecated.php
Normal file
@@ -0,0 +1,292 @@
|
||||
<?php
|
||||
namespace ElementorPro\Modules\Woocommerce\Widgets;
|
||||
|
||||
use Elementor\Controls_Manager;
|
||||
use ElementorPro\Plugin;
|
||||
use ElementorPro\Modules\QueryControl\Controls\Group_Control_Posts;
|
||||
use ElementorPro\Modules\QueryControl\Module;
|
||||
use ElementorPro\Modules\Woocommerce\Skins;
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit; // Exit if accessed directly
|
||||
}
|
||||
|
||||
/**
|
||||
* Class Products_Deprecated
|
||||
*
|
||||
* @deprecated 2.4.1 Use `Products` class instead.
|
||||
*/
|
||||
class Products_Deprecated extends Products_Base {
|
||||
|
||||
/**
|
||||
* @var \WP_Query
|
||||
*/
|
||||
private $query = null;
|
||||
|
||||
protected $_has_template_content = false;
|
||||
|
||||
public function get_name() {
|
||||
return 'wc-products';
|
||||
}
|
||||
|
||||
public function get_categories() {
|
||||
return [
|
||||
'woocommerce-elements',
|
||||
];
|
||||
}
|
||||
|
||||
public function get_title() {
|
||||
return esc_html__( 'Woo - Products-', 'elementor-pro' );
|
||||
}
|
||||
|
||||
public function get_icon() {
|
||||
return 'eicon-products';
|
||||
}
|
||||
|
||||
public function get_keywords() {
|
||||
return [ 'woocommerce', 'shop', 'store', 'loop', 'query', 'product' ];
|
||||
}
|
||||
|
||||
/* Deprecated Widget */
|
||||
public function show_in_panel() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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-products' ];
|
||||
}
|
||||
|
||||
public function on_export( $element ) {
|
||||
$element = Group_Control_Posts::on_export_remove_setting_from_element( $element, 'posts' );
|
||||
|
||||
return $element;
|
||||
}
|
||||
|
||||
public function get_query() {
|
||||
return $this->query;
|
||||
}
|
||||
|
||||
protected function register_skins() {
|
||||
$this->add_skin( new Skins\Skin_Classic( $this ) );
|
||||
}
|
||||
|
||||
protected function register_controls() {
|
||||
$this->deprecated_notice( Plugin::get_title(), '2.0.10', '', esc_html__( 'Products', 'elementor-pro' ) );
|
||||
|
||||
$this->start_controls_section(
|
||||
'section_layout',
|
||||
[
|
||||
'label' => esc_html__( 'Layout', 'elementor-pro' ),
|
||||
'tab' => Controls_Manager::TAB_CONTENT,
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'posts_per_page',
|
||||
[
|
||||
'label' => esc_html__( 'Products Count', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::NUMBER,
|
||||
'default' => '4',
|
||||
]
|
||||
);
|
||||
|
||||
$this->end_controls_section();
|
||||
|
||||
$this->start_controls_section(
|
||||
'section_filter',
|
||||
[
|
||||
'label' => esc_html__( 'Query', 'elementor-pro' ),
|
||||
'tab' => Controls_Manager::TAB_CONTENT,
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_group_control(
|
||||
Group_Control_Posts::get_type(),
|
||||
[
|
||||
'name' => 'posts',
|
||||
'post_type' => 'product',
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'advanced',
|
||||
[
|
||||
'label' => esc_html__( 'Advanced', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::HEADING,
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'filter_by',
|
||||
[
|
||||
'label' => esc_html__( 'Filter By', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::SELECT,
|
||||
'default' => '',
|
||||
'options' => [
|
||||
'' => esc_html__( 'None', 'elementor-pro' ),
|
||||
'featured' => esc_html__( 'Featured', 'elementor-pro' ),
|
||||
'sale' => esc_html__( 'Sale', 'elementor-pro' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'orderby',
|
||||
[
|
||||
'label' => esc_html__( 'Order By', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::SELECT,
|
||||
'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' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'order',
|
||||
[
|
||||
'label' => esc_html__( 'Order', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::SELECT,
|
||||
'default' => 'desc',
|
||||
'options' => [
|
||||
'asc' => esc_html__( 'ASC', 'elementor-pro' ),
|
||||
'desc' => esc_html__( 'DESC', 'elementor-pro' ),
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'exclude',
|
||||
[
|
||||
'label' => esc_html__( 'Exclude', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::SELECT2,
|
||||
'multiple' => true,
|
||||
'options' => [
|
||||
'current_post' => esc_html__( 'Current Post', 'elementor-pro' ),
|
||||
'manual_selection' => esc_html__( 'Manual Selection', 'elementor-pro' ),
|
||||
],
|
||||
'label_block' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'exclude_ids',
|
||||
[
|
||||
'label' => esc_html__( 'Search & Select', 'elementor-pro' ),
|
||||
'type' => Module::QUERY_CONTROL_ID,
|
||||
'autocomplete' => [
|
||||
'object' => Module::QUERY_OBJECT_POST,
|
||||
],
|
||||
'options' => [],
|
||||
'label_block' => true,
|
||||
'multiple' => true,
|
||||
'condition' => [
|
||||
'exclude' => 'manual_selection',
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'avoid_duplicates',
|
||||
[
|
||||
'label' => esc_html__( 'Avoid Duplicates', 'elementor-pro' ),
|
||||
'type' => Controls_Manager::SWITCHER,
|
||||
'default' => '',
|
||||
'description' => esc_html__( 'Set to Yes to avoid duplicate posts from showing up on the page. This only affects the frontend.', 'elementor-pro' ),
|
||||
]
|
||||
);
|
||||
|
||||
$this->end_controls_section();
|
||||
|
||||
parent::register_controls();
|
||||
}
|
||||
|
||||
public function query_posts() {
|
||||
$settings = $this->get_settings();
|
||||
/** @var Module $query_module */
|
||||
$query_module = Module::instance();
|
||||
$query_args = $query_module->get_query_args( 'posts', $settings );
|
||||
|
||||
// Default ordering args
|
||||
$ordering_args = WC()->query->get_catalog_ordering_args( $settings['orderby'], $settings['order'] );
|
||||
|
||||
$query_args['orderby'] = $ordering_args['orderby'];
|
||||
$query_args['order'] = $ordering_args['order'];
|
||||
|
||||
if ( ! empty( $ordering_args['meta_key'] ) ) {
|
||||
$query_args['meta_key'] = $ordering_args['meta_key'];
|
||||
}
|
||||
|
||||
if ( 'sale' === $settings['filter_by'] ) {
|
||||
// From WooCommerce `sale_products` shortcode
|
||||
$query_args['post__in'] = array_merge( [ 0 ], wc_get_product_ids_on_sale() );
|
||||
}
|
||||
|
||||
if ( version_compare( WC()->version, '3.0.0', '>=' ) ) {
|
||||
$query_args = $this->get_wc_visibility_parse_query( $query_args );
|
||||
} else {
|
||||
$query_args = $this->get_wc_legacy_visibility_parse_query( $query_args );
|
||||
}
|
||||
|
||||
$this->query = new \WP_Query( $query_args );
|
||||
}
|
||||
|
||||
private function get_wc_visibility_parse_query( $query_args ) {
|
||||
$settings = $this->get_settings();
|
||||
$product_visibility_term_ids = wc_get_product_visibility_term_ids();
|
||||
|
||||
if ( 'featured' === $settings['filter_by'] ) {
|
||||
$query_args['tax_query'][] = [
|
||||
'taxonomy' => 'product_visibility',
|
||||
'field' => 'term_taxonomy_id',
|
||||
'terms' => $product_visibility_term_ids['featured'],
|
||||
];
|
||||
}
|
||||
|
||||
return $query_args;
|
||||
}
|
||||
|
||||
private function get_wc_legacy_visibility_parse_query( $query_args ) {
|
||||
$settings = $this->get_settings();
|
||||
|
||||
$query_args['meta_query'] = [
|
||||
[
|
||||
'key' => '_visibility',
|
||||
'value' => [ 'catalog', 'visible' ],
|
||||
'compare' => 'IN',
|
||||
],
|
||||
];
|
||||
|
||||
if ( 'featured' === $settings['filter_by'] ) {
|
||||
// From WooCommerce `featured_products` shortcode
|
||||
$query_args['meta_query'][] = [
|
||||
'key' => '_featured',
|
||||
'value' => 'yes',
|
||||
];
|
||||
}
|
||||
|
||||
return $query_args;
|
||||
}
|
||||
|
||||
public function render_plain_content() {}
|
||||
|
||||
public function get_group_name() {
|
||||
return 'woocommerce';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user