8889841cskin-grid-5.php 0000644 00000001541 15044377063 0007320 0 ustar 00 ( $settings['products_show'] ) ? absint( $settings['products_show'] ) : 4, 'slidesToScroll' => ( $settings['products_on_scroll'] ) ? absint( $settings['products_on_scroll'] ) : 1, 'autoplaySpeed' => ( $settings['autoplay_speed'] ) ? absint( $settings['autoplay_speed'] ) : 5000, 'autoplay' => ( 'yes' === $settings['autoplay_slides'] ), 'infinite' => ( 'yes' === $settings['infinite_loop'] ), 'pauseOnHover' => ( 'yes' === $settings['hover_pause'] ), 'speed' => ( $settings['speed'] ) ? absint( $settings['speed'] ) : 500, 'arrows' => $arrows, 'dots' => $dots, 'rtl' => $is_rtl, 'prevArrow' => '', 'nextArrow' => '', ); if ( $settings['products_show_tablet'] || $settings['products_show_mobile'] ) { $slick_options['responsive'] = array(); if ( $settings['products_show_tablet'] ) { $tablet_show = absint( $settings['products_show_tablet'] ); $tablet_scroll = ( $settings['products_on_scroll_tablet'] ) ? absint( $settings['products_on_scroll_tablet'] ) : $tablet_show; $slick_options['responsive'][] = array( 'breakpoint' => 1024, 'settings' => array( 'slidesToShow' => $tablet_show, 'slidesToScroll' => $tablet_scroll, ), ); } if ( $settings['products_show_mobile'] ) { $mobile_show = absint( $settings['products_show_mobile'] ); $mobile_scroll = ( $settings['products_on_scroll_mobile'] ) ? absint( $settings['products_on_scroll_mobile'] ) : $mobile_show; $slick_options['responsive'][] = array( 'breakpoint' => 767, 'settings' => array( 'slidesToShow' => $mobile_show, 'slidesToScroll' => $mobile_scroll, ), ); } } $this->add_render_attribute( 'wrapper', array( 'class' => 'premium-carousel-hidden', 'data-woo_carousel' => wp_json_encode( $slick_options ), ) ); } /** * Render Query. * * @since 1.1.0 */ public function render_query( $ajax = false ) { $this->query_posts( $ajax ); } /** * Get query products based on settings. * * Written in PHP and used to generate the final HTML. * * @since 4.7.0 * @access public */ public function query_posts( $ajax ) { $settings = self::$settings; if ( 'main' === $settings['query_type'] ) { if ( $ajax ) { $query_args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'paged' => 1, ); if ( $settings['products_numbers'] > 0 ) { $query_args['posts_per_page'] = $settings['products_numbers']; } $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : false; $orderby = 'menu_order title'; if ( $nonce && wp_verify_nonce( $nonce, 'pa-woo-products-nonce' ) ) { if ( isset( $_POST['page_number'] ) && '' !== $_POST['page_number'] ) { $paged = sanitize_text_field( wp_unslash( $_POST['page_number'] ) ); } if ( isset( $_POST['orderBy'] ) && '' !== $_POST['orderBy'] ) { $orderby = sanitize_text_field( wp_unslash( $_POST['orderBy'] ) ); } } $query_args['paged'] = $paged; $query_args['orderby'] = $orderby; if ( isset( $_POST['category'] ) && '' !== $_POST['category'] ) { $query_args['product_cat'] = sanitize_text_field( wp_unslash( $_POST['category'] ) ); } $query_args['order'] = 'ASC'; self::$query_args = $query_args; self::$query = new \WP_Query( $query_args ); } else { global $wp_query; $main_query = clone $wp_query; self::$query = $main_query; self::$query_args = $main_query->query_vars; } } elseif ( 'related' === $settings['query_type'] ) { 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['layout_type'] || 'masonry' === $settings['layout_type'] ) { if ( $settings['products_numbers'] > 0 ) { $query_args['posts_per_page'] = $settings['products_numbers']; } if ( 'yes' === $settings['pagination'] || 'yes' === $settings['load_more'] ) { $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : false; if ( $nonce && wp_verify_nonce( $nonce, 'pa-woo-products-nonce' ) ) { if ( isset( $_POST['page_number'] ) && '' !== $_POST['page_number'] ) { $paged = sanitize_text_field( wp_unslash( $_POST['page_number'] ) ); } } $query_args['paged'] = $paged; } } else { if ( $settings['total_carousel_products'] > 0 ) { $query_args['posts_per_page'] = $settings['total_carousel_products']; } } // 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', ); } $query_args = apply_filters( 'premium_woo_products_query_args', $query_args, $settings ); self::$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 ), ); $query_args = apply_filters( 'premium_woo_products_query_args', $query_args, $settings ); self::$query = new \WP_Query( $query_args ); } } elseif ( 'cross-sells' === $settings['query_type'] ) { $cross_sells_ids = $this->get_cross_sells_ids(); $product_visibility_term_ids = wc_get_product_visibility_term_ids(); if ( ! $cross_sells_ids ) { $cross_sells_ids = array( 0 ); } $query_args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, 'paged' => 1, 'post__in' => $cross_sells_ids, ); /** * Filters. */ // carousel. if ( 'grid' === $settings['layout_type'] || 'masonry' === $settings['layout_type'] ) { if ( $settings['products_numbers'] > 0 ) { $query_args['posts_per_page'] = $settings['products_numbers']; } } else { if ( $settings['total_carousel_products'] > 0 ) { $query_args['posts_per_page'] = $settings['total_carousel_products']; } } // 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 ( '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( 'premium_woo_products_query_args', $query_args, $settings ); self::$query = new \WP_Query( $query_args ); } elseif ( 'up-sells' === $settings['query_type'] ) { /** * Up-sells are products that you recommend instead of the currently viewed product. */ if ( is_product() ) { global $product; $product_upsell = 0 === count( $product->get_upsell_ids() ) ? array( 0 ) : $product->get_upsell_ids(); $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__in' => $product_upsell, ); /** * Filters. */ // carousel. if ( 'grid' === $settings['layout_type'] || 'masonry' === $settings['layout_type'] ) { if ( $settings['products_numbers'] > 0 ) { $query_args['posts_per_page'] = $settings['products_numbers']; } } else { if ( $settings['total_carousel_products'] > 0 ) { $query_args['posts_per_page'] = $settings['total_carousel_products']; } } // 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 ( '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( 'premium_woo_products_query_args', $query_args, $settings ); self::$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 ), ); $query_args = apply_filters( 'premium_woo_products_query_args', $query_args, $settings ); self::$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', 'post_status' => 'publish', 'posts_per_page' => -1, 'paged' => 1, 'post__not_in' => array(), ); if ( 'grid' === $settings['layout_type'] || 'masonry' === $settings['layout_type'] ) { if ( $settings['products_numbers'] > 0 ) { $query_args['posts_per_page'] = $settings['products_numbers']; } if ( 'yes' === $settings['pagination'] || 'yes' === $settings['load_more'] ) { $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : false; if ( $nonce && wp_verify_nonce( $nonce, 'pa-woo-products-nonce' ) ) { if ( isset( $_POST['page_number'] ) && '' !== $_POST['page_number'] ) { $paged = sanitize_text_field( wp_unslash( $_POST['page_number'] ) ); } } $query_args['paged'] = $paged; } } else { if ( $settings['total_carousel_products'] > 0 ) { $query_args['posts_per_page'] = $settings['total_carousel_products']; } } // 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 ( $ordering_args['meta_key'] ) { $query_args['meta_key'] = $ordering_args['meta_key']; } 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'], ); } if ( 'custom' === $settings['query_type'] ) { if ( ! empty( $settings['categories'] ) ) { $cat_rule = $settings['categories_filter_rule']; $query_args['tax_query'][] = array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $settings['categories'], 'operator' => $cat_rule, ); } if ( ! empty( $settings['tags'] ) ) { $tag_rule = $settings['tags_filter_rule']; $query_args['tax_query'][] = array( 'taxonomy' => 'product_tag', 'field' => 'slug', 'terms' => $settings['tags'], 'operator' => $tag_rule, ); } if ( ! empty( $settings['products'] ) ) { $query_args[ $settings['product_filter_rule'] ] = $settings['products']; } if ( 0 < $settings['offset'] ) { $query_args['offset_to_fix'] = $settings['offset']; } } if ( 'manual' === $settings['query_type'] ) { $manual_ids = $settings['query_manual_ids']; $query_args['post__in'] = $manual_ids; } if ( 'manual' !== $settings['query_type'] && 'main' !== $settings['query_type'] ) { // if ( '' !== $settings['exclude_products'] ) { // $exclude_ids = $settings['exclude_products']; // $query_args['post__not_in'] = $exclude_ids; // } if ( 'yes' === $settings['exclude_current_product'] ) { $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( 'premium_woo_products_query_args', $query_args, $settings ); self::$query_args = $query_args; self::$query = new \WP_Query( $query_args ); } } /** * Get cross-sells products' ids. * returns single product's cross-sells, or return all the cross-sell products based on cart items. * Cross-sells are products that you promote in the cart, based on the current product. * * @access public * @since 4.9.24 * * @return array */ public function get_cross_sells_ids() { $cross_sells_ids = array(); if ( is_product() ) { global $product; $cross_sells_ids = $product->get_cross_sell_ids(); } else { $cart = WC()->cart; if ( ! $cart ) { return false; } $cross_sells_ids = WC()->cart->get_cross_sells(); } $cross_sells_ids = 0 === count( $cross_sells_ids ) ? false : $cross_sells_ids; return $cross_sells_ids; } /** * Render loop required arguments. * * @since 1.1.0 */ public function set_query_args() { $query = $this->get_query(); global $woocommerce_loop; $settings = self::$settings; if ( 'grid' === $settings['layout_type'] || 'masonry' === $settings['layout_type'] ) { $woocommerce_loop['columns'] = intval( 100 / substr( $settings['columns'], 0, strpos( $settings['columns'], '%' ) ) ); if ( '16.667%' === $settings['columns'] ) { $woocommerce_loop['columns'] = 6; } // if ( 'main' !== $settings['query_type'] ) { if ( 0 < $settings['products_numbers'] && '' !== $settings['pagination'] ) { /* Pagination */ $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : false; if ( $nonce && wp_verify_nonce( $nonce, 'pa-woo-products-nonce' ) ) { if ( isset( $_POST['page_number'] ) && '' !== $_POST['page_number'] ) { $paged = sanitize_text_field( wp_unslash( $_POST['page_number'] ) ); } } $woocommerce_loop['paged'] = $paged; $woocommerce_loop['total'] = $query->found_posts; $woocommerce_loop['post_count'] = $query->post_count; $woocommerce_loop['per_page'] = $settings['products_numbers']; $woocommerce_loop['total_pages'] = ceil( $query->found_posts / $settings['products_numbers'] ); $woocommerce_loop['current_page'] = $paged; } $divider = $this->get_option_value( 'divider' ); if ( 'yes' === $divider && 'grid' === $settings['layout_type'] ) { $this->add_render_attribute( 'wrapper', 'class', 'premium-woo-grid-' . $woocommerce_loop['columns'] ); } elseif ( 'masonry' === $settings['layout_type'] ) { $this->add_render_attribute( 'wrapper', 'class', 'premium-woo-masonry-' . $woocommerce_loop['columns'] ); } // } // } else { // if ( in_array( $settings['navigation'], array( 'dots', 'both' ), true ) ) { // $this->add_render_attribute( // 'inner', // array( // 'class' => array( // 'premium-addons-for-elementor-slick-dotted', // ), // ) // ); // } } } /** * Pagination Structure. * * @since 1.1.0 */ public function render_pagination_structure() { $settings = self::$settings; $is_recommendation = in_array( $settings['query_type'], array( 'cross-sells', 'up- sells' ), true ) ? true : false; if ( 'yes' === $settings['pagination'] && ! $is_recommendation ) { add_filter( 'wc_get_template', array( $this, 'woo_pagination_template' ), 10, 5 ); add_filter( 'premium_woo_pagination_args', array( $this, 'get_pagination_args' ) ); woocommerce_pagination(); remove_filter( 'premium_woo_pagination_args', array( $this, 'get_pagination_args' ) ); remove_filter( 'wc_get_template', array( $this, 'woo_pagination_template' ), 10, 5 ); } } /** * Render Load More Button * * @since 4.9.11 */ public function render_load_more_button() { $settings = self::$settings; if ( 'yes' !== $settings['load_more'] || 'carousel' == $settings['layout_type'] ) { return; } $posts_per_page = self::$query_args['posts_per_page']; $args = self::$query_args; $orderby = $args['orderby']; if ( 'main' === $settings['query_type'] ) { $args = array( 'post_type' => 'product', 'product_cat' => $args['product_cat'], ); } $args['posts_per_page'] = -1; $all_products = new \WP_Query( $args ); if ( ! isset( $all_products->found_posts ) ) { return; } $more_products = $all_products->found_posts - $posts_per_page; $category = isset( $args['product_cat'] ) && ! empty( $args['product_cat'] ) ? $args['product_cat'] : ''; if ( $more_products < 1 ) { return; } ?>