> __( 'Normal', 'powerpack' ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'arrows_color', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow' => 'color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'arrows_bg_color', array( 'label' => __( 'Background Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow' => 'background-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', 'arrows_style' => array( 'circle', 'square' ), ), ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'arrows_border', 'label' => __( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', 'arrows_style' => array( 'circle', 'square' ), ), ) ); $this->add_responsive_control( 'arrows_padding', array( 'label' => __( 'Padding', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', 'em', '%' ), 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', 'arrows_style' => array( 'circle', 'square' ), ), ) ); $this->end_controls_tab(); $this->start_controls_tab( 'arrow_style_hover', array( 'label' => __( 'Hover', 'powerpack' ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'arrows_hover_color', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow:hover' => 'color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'arrows_hover_bg_color', array( 'label' => __( 'Background Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow:hover' => 'background-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', 'arrows_style' => array( 'circle', 'square' ), ), ) ); $this->add_control( 'arrows_hover_border_color', array( 'label' => __( 'Border Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-slider .slick-arrow:hover' => 'border-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', 'arrows_style' => array( 'circle', 'square' ), ), ) ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->add_control( 'heading_style_dots', array( 'label' => __( 'Dots', 'powerpack' ), 'type' => Controls_Manager::HEADING, 'separator' => 'before', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_responsive_control( 'dots_top_spacing', array( 'label' => __( 'Top Spacing', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), ), 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots' => 'bottom: -{{SIZE}}{{UNIT}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_responsive_control( 'dots_spacing', array( 'label' => __( 'Spacing', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 0, 'max' => 100, ), ), 'default' => array( 'size' => 5, 'unit' => 'px', ), 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li' => 'margin-left: calc( {{SIZE}}{{UNIT}}/2 ); margin-right: calc( {{SIZE}}{{UNIT}}/2 );', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_control( 'dots_size', array( 'label' => __( 'Size', 'powerpack' ), 'type' => Controls_Manager::SLIDER, 'range' => array( 'px' => array( 'min' => 5, 'max' => 20, ), ), 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li button' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->start_controls_tabs( 'dots_tabs_style' ); $this->start_controls_tab( 'dots_style_normal', array( 'label' => __( 'Normal', 'powerpack' ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'dots_color', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li button' => 'background-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_group_control( Group_Control_Border::get_type(), array( 'name' => 'dots_border', 'label' => __( 'Border', 'powerpack' ), 'selector' => '{{WRAPPER}} .pp-woo-products-slider .slick-dots li', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_responsive_control( 'dots_border_radius', array( 'label' => __( 'Rounded Corners', 'powerpack' ), 'type' => Controls_Manager::DIMENSIONS, 'size_units' => array( 'px', '%' ), 'default' => array( 'top' => '', 'bottom' => '', 'left' => '', 'right' => '', 'unit' => 'px', ), 'condition' => array( 'sale_badge_position!' => '', 'sale_badge_style' => 'custom', ), 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li, {{WRAPPER}} .pp-woo-products-slider .slick-dots li button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'dots_box_shadow', 'selector' => '{{WRAPPER}} .pp-woo-products-slider .slick-dots li', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->end_controls_tab(); $this->start_controls_tab( 'dots_style_active', array( 'label' => __( 'Active', 'powerpack' ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'dots_color_active', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li.slick-active button' => 'background-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_control( 'dots_border_color_active', array( 'label' => __( 'Border Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li.slick-active' => 'border-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'dots_box_shadow_active', 'selector' => '{{WRAPPER}} .pp-woo-products-slider .slick-dots li.slick-active', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->end_controls_tab(); $this->start_controls_tab( 'dots_style_hover', array( 'label' => __( 'Hover', 'powerpack' ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->add_control( 'dots_color_hover', array( 'label' => __( 'Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li:hover button' => 'background-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_control( 'dots_border_color_hover', array( 'label' => __( 'Border Color', 'powerpack' ), 'type' => Controls_Manager::COLOR, 'selectors' => array( '{{WRAPPER}} .pp-woo-products-slider .slick-dots li:hover' => 'border-color: {{VALUE}};', ), 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'carousel_pagination' => 'yes', ), ) ); $this->add_group_control( Group_Control_Box_Shadow::get_type(), array( 'name' => 'dots_box_shadow_hover', 'selector' => '{{WRAPPER}} .pp-woo-products-slider .slick-dots li:hover', 'condition' => array( '_skin' => array( 'skin-1', 'skin-2', 'skin-3', 'skin-4', 'skin-5' ), 'products_layout_type' => 'slider', 'arrows' => 'yes', ), ) ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); } /** * Get WooCommerce Product Categories. * * @access protected */ protected function get_product_categories() { $product_cat = array(); $cat_args = array( 'orderby' => 'name', 'order' => 'asc', 'hide_empty' => false, ); $product_categories = get_terms( 'product_cat', $cat_args ); if ( ! empty( $product_categories ) ) { foreach ( $product_categories as $key => $category ) { $product_cat[ $category->slug ] = $category->name; } } return $product_cat; } /** * Get WooCommerce Product Tags. * * @access protected */ protected function get_product_tags() { $product_tag = array(); $tag_args = array( 'orderby' => 'name', 'order' => 'asc', 'hide_empty' => false, ); $product_tag = get_terms( 'product_tag', $tag_args ); if ( ! empty( $product_tag ) ) { foreach ( $product_tag as $key => $tag ) { $product_tag[ $tag->slug ] = $tag->name; } } return $product_tag; } /** * Get query products based on settings. * * Written in PHP and used to generate the final HTML. * * @access public */ public function query_posts() { $settings = $this->get_settings(); if ( 'main' === $settings['source'] ) { $query_args = $GLOBALS['wp_query']->query_vars; $this->query = new \WP_Query( $query_args ); } elseif ( 'related' === $settings['source'] ) { if ( is_product() ) { global $product; $product_id = $product->get_id(); $product_visibility_term_ids = wc_get_product_visibility_term_ids(); $query_args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'paged' => 1, 'post__not_in' => array(), ); if ( 'grid' === $settings['products_layout_type'] ) { if ( $settings['products_per_page'] > 0 ) { $query_args['posts_per_page'] = $settings['products_per_page']; } if ( '' !== $settings['pagination_type'] ) { $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; if ( isset( $_POST['page_number'] ) && '' !== $_POST['page_number'] ) { $paged = $_POST['page_number']; } $query_args['paged'] = $paged; } } else { if ( $settings['slider_products_per_page'] > 0 ) { $query_args['posts_per_page'] = $settings['slider_products_per_page']; } } // Get current post categories and pass to filter. $product_cat = array(); $product_categories = wp_get_post_terms( $product_id, 'product_cat' ); if ( ! empty( $product_categories ) ) { foreach ( $product_categories as $key => $category ) { $product_cat[] = $category->slug; } } if ( ! empty( $product_cat ) ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $product_cat, 'operator' => 'IN', ); } // Exclude current product. $query_args['post__not_in'][] = $product_id; if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['outofstock'], 'operator' => 'NOT IN', ); } if ( ! empty( $product_visibility_term_ids['exclude-from-catalog'] ) ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['exclude-from-catalog'], 'operator' => 'NOT IN', ); } // 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']; $query_args = apply_filters( 'ppe_woo_product_query_args', $query_args, $settings ); $this->query = new \WP_Query( $query_args ); } else { $query_args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'paged' => 1, 'post__in' => array( 0 ), ); // 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']; $query_args = apply_filters( 'ppe_woo_product_query_args', $query_args, $settings ); $this->query = new \WP_Query( $query_args ); } } else { global $post; $product_visibility_term_ids = wc_get_product_visibility_term_ids(); $query_args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'paged' => 1, 'post__not_in' => array(), ); if ( 'grid' === $settings['products_layout_type'] ) { if ( $settings['products_per_page'] > 0 ) { $query_args['posts_per_page'] = $settings['products_per_page']; } if ( '' !== $settings['pagination_type'] ) { $paged = max( 1, get_query_var( 'paged' ), get_query_var( 'page' ) ); $query_args['paged'] = $paged; } } else { if ( $settings['slider_products_per_page'] > 0 ) { $query_args['posts_per_page'] = $settings['slider_products_per_page']; } } // 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 ( 'sale' === $settings['filter_by'] ) { $query_args['post__in'] = array_merge( array( 0 ), wc_get_product_ids_on_sale() ); } elseif ( 'featured' === $settings['filter_by'] ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['featured'], ); } elseif ( 'top_rated' === $settings['filter_by'] ) { $query_args['meta_key'] = '_wc_average_rating'; $query_args['orderby'] = 'meta_value_num'; $query_args['meta_query'] = WC()->query->get_meta_query(); $query_args['tax_query'] = WC()->query->get_tax_query(); } elseif ( 'best_selling' === $settings['filter_by'] ) { $query_args['meta_key'] = 'total_sales'; $query_args['order'] = 'DESC'; $query_args['orderby'] = 'meta_value_num'; } if ( 'custom' === $settings['source'] ) { if ( ! empty( $settings['category_filter'] ) ) { $cat_operator = $settings['category_filter_rule']; $query_args['tax_query'][] = array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $settings['category_filter'], 'operator' => $cat_operator, ); } if ( ! empty( $settings['tag_filter'] ) ) { $tag_operator = $settings['tag_filter_rule']; $query_args['tax_query'][] = array( 'taxonomy' => 'product_tag', 'field' => 'slug', 'terms' => $settings['tag_filter'], 'operator' => $tag_operator, ); } if ( 0 < $settings['offset'] ) { /** * Offser break the pagination. Using WordPress's work around * * @see https://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination */ $query_args['offset_to_fix'] = $settings['offset']; } } if ( 'manual' === $settings['source'] ) { $manual_ids = $settings['query_manual_ids']; $query_args['post__in'] = $manual_ids; } if ( 'manual' !== $settings['source'] ) { if ( '' !== $settings['query_exclude_ids'] ) { $exclude_ids = $settings['query_exclude_ids']; $query_args['post__not_in'] = $exclude_ids; } if ( 'yes' === $settings['query_exclude_current'] ) { $query_args['post__not_in'][] = $post->ID; } } if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['outofstock'], 'operator' => 'NOT IN', ); } if ( ! empty( $product_visibility_term_ids['exclude-from-catalog'] ) ) { $query_args['tax_query'][] = array( 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['exclude-from-catalog'], 'operator' => 'NOT IN', ); } $query_args = apply_filters( 'ppe_woo_product_query_args', $query_args, $settings ); $this->query = new \WP_Query( $query_args ); } } }