] = 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 ); } } }