WC_Widget_Products::get_products()publicWC 1.0

Query the products and return them.

Метод класса: WC_Widget_Products{}

Хуки из метода

Возвращает

WP_Query.

Использование

$WC_Widget_Products = new WC_Widget_Products();
$WC_Widget_Products->get_products( $args, $instance );
$args(массив) (обязательный)
Arguments.
$instance(массив) (обязательный)
Widget instance.

Код WC_Widget_Products::get_products() WC 8.7.0

public function get_products( $args, $instance ) {
	$number                      = ! empty( $instance['number'] ) ? absint( $instance['number'] ) : $this->settings['number']['std'];
	$show                        = ! empty( $instance['show'] ) ? sanitize_title( $instance['show'] ) : $this->settings['show']['std'];
	$orderby                     = ! empty( $instance['orderby'] ) ? sanitize_title( $instance['orderby'] ) : $this->settings['orderby']['std'];
	$order                       = ! empty( $instance['order'] ) ? sanitize_title( $instance['order'] ) : $this->settings['order']['std'];
	$product_visibility_term_ids = wc_get_product_visibility_term_ids();

	$query_args = array(
		'posts_per_page' => $number,
		'post_status'    => 'publish',
		'post_type'      => 'product',
		'no_found_rows'  => 1,
		'order'          => $order,
		'meta_query'     => array(),
		'tax_query'      => array(
			'relation' => 'AND',
		),
	); // WPCS: slow query ok.

	if ( empty( $instance['show_hidden'] ) ) {
		$query_args['tax_query'][] = array(
			'taxonomy' => 'product_visibility',
			'field'    => 'term_taxonomy_id',
			'terms'    => is_search() ? $product_visibility_term_ids['exclude-from-search'] : $product_visibility_term_ids['exclude-from-catalog'],
			'operator' => 'NOT IN',
		);
		$query_args['post_parent'] = 0;
	}

	if ( ! empty( $instance['hide_free'] ) ) {
		$query_args['meta_query'][] = array(
			'key'     => '_price',
			'value'   => 0,
			'compare' => '>',
			'type'    => 'DECIMAL',
		);
	}

	if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) ) {
		$query_args['tax_query'][] = array(
			array(
				'taxonomy' => 'product_visibility',
				'field'    => 'term_taxonomy_id',
				'terms'    => $product_visibility_term_ids['outofstock'],
				'operator' => 'NOT IN',
			),
		); // WPCS: slow query ok.
	}

	switch ( $show ) {
		case 'featured':
			$query_args['tax_query'][] = array(
				'taxonomy' => 'product_visibility',
				'field'    => 'term_taxonomy_id',
				'terms'    => $product_visibility_term_ids['featured'],
			);
			break;
		case 'onsale':
			$product_ids_on_sale    = wc_get_product_ids_on_sale();
			$product_ids_on_sale[]  = 0;
			$query_args['post__in'] = $product_ids_on_sale;
			break;
	}

	switch ( $orderby ) {
		case 'menu_order':
			$query_args['orderby'] = 'menu_order';
			break;
		case 'price':
			$query_args['meta_key'] = '_price'; // WPCS: slow query ok.
			$query_args['orderby']  = 'meta_value_num';
			break;
		case 'rand':
			$query_args['orderby'] = 'rand';
			break;
		case 'sales':
			$query_args['meta_key'] = 'total_sales'; // WPCS: slow query ok.
			$query_args['orderby']  = 'meta_value_num';
			break;
		default:
			$query_args['orderby'] = 'date';
	}

	return new WP_Query( apply_filters( 'woocommerce_products_widget_query_args', $query_args ) );
}