پیدا کردن حداقل و حداکثر قیمت ها در ووکامرس

من به دنبال راهی بودم که قیمت کمترین محصول که در ووکامرس وجود دارد را پیدا کنم

اما خب مشکلات بود که قیمت برنمیگردوند تا من به دنبال نوشتن آن برخواستم و به چیزای جالبی رسیدم:)


	function get_filtered_price_sample() {
		
		global $wpdb;

		$args       = WC()->query->get_main_query()->query_vars;
		$tax_query  = isset( $args['tax_query'] ) ? $args['tax_query'] : array();
		$meta_query = isset( $args['meta_query'] ) ? $args['meta_query'] : array();

		if ( ! is_post_type_archive( 'product' ) && ! empty( $args['taxonomy'] ) && ! empty( $args['term'] ) ) {
			$tax_query[] = WC()->query->get_main_tax_query();
		}

		foreach ( $meta_query + $tax_query as $key => $query ) {
			if ( ! empty( $query['price_filter'] ) || ! empty( $query['rating_filter'] ) ) {
				unset( $meta_query[ $key ] );
			}
		}

		$meta_query = new WP_Meta_Query( $meta_query );
		$tax_query  = new WP_Tax_Query( $tax_query );
		$search     = WC_Query::get_main_search_query_sql();

		$meta_query_sql   = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
		$tax_query_sql    = $tax_query->get_sql( $wpdb->posts, 'ID' );
		$search_query_sql = $search ? ' AND ' . $search : '';

		$sql = "
			SELECT min( min_price ) as min_price, MAX( max_price ) as max_price
			FROM {$wpdb->wc_product_meta_lookup}
			WHERE product_id IN (
				SELECT ID FROM {$wpdb->posts}
				" . $tax_query_sql['join'] . $meta_query_sql['join'] . "
				WHERE {$wpdb->posts}.post_type IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( 'product' ) ) ) ) . "')
				AND {$wpdb->posts}.post_status = 'publish'
				" . $tax_query_sql['where'] . $meta_query_sql['where'] . $search_query_sql . '
			)';


		return $wpdb->get_row( $sql );
	}

کافیه شما برای نمایش خروجی از نمونه کدهای زیر برای حداقل و حداکثر استفاده کنید


get_filtered_price_sample()->min_price

و برای بیشترین مبلغ  :


get_filtered_price_sample()->max_price

کاربردهای آن :

  1. اگر فیلتر جستجو خواصی دارید طراحی میکنید و میخواهید بر اساس حداقل و حداکثر نمایش دهد همانند دیوار

 

اگر سوال ، انتقاد و یا پیشنهادی دارید میتوانید از همین طریق برای ما تیکت ارسال کنید!