Automattic\WooCommerce\StoreApi\Utilities
ProductQueryFilters::get_product_by_metas()
Gets product by metas.
Метод класса: ProductQueryFilters{}
Хуков нет.
Возвращает
Массив
. $results
Использование
$ProductQueryFilters = new ProductQueryFilters(); $ProductQueryFilters->get_product_by_metas( $metas );
- $metas(массив)
- Array of metas to query.
По умолчанию: array()
Список изменений
Код ProductQueryFilters::get_product_by_metas() ProductQueryFilters::get product by metas WC 8.7.0
public function get_product_by_metas( $metas = array() ) { global $wpdb; if ( empty( $metas ) ) { return array(); } $where = array(); $results = array(); $params = array(); foreach ( $metas as $column => $value ) { if ( empty( $value ) ) { continue; } if ( 'stock_status' === $column ) { $stock_product_ids = array(); foreach ( $value as $stock_status ) { $stock_product_ids[] = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT product_id FROM {$wpdb->prefix}wc_product_meta_lookup WHERE stock_status = %s", $stock_status ) ); } $where[] = 'product_id IN (' . implode( ',', array_merge( ...$stock_product_ids ) ) . ')'; continue; } if ( 'min_price' === $column ) { $where[] = "{$column} >= %d"; $params[] = intval( $value ) / 100; continue; } if ( 'max_price' === $column ) { $where[] = "{$column} <= %d"; $params[] = intval( $value ) / 100; continue; } if ( 'average_rating' === $column ) { $where_rating = array(); foreach ( $value as $rating ) { $where_rating[] = sprintf( '(average_rating >= %f - 0.5 AND average_rating < %f + 0.5)', $rating, $rating ); } $where[] = '(' . implode( ' OR ', $where_rating ) . ')'; continue; } $where[] = sprintf( "%1s = '%s'", $column, $value ); $params[] = $value; } if ( ! empty( $where ) ) { $where_clause = implode( ' AND ', $where ); $where_clause = sprintf( $where_clause, ...$params ); // phpcs:disable WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder $results = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT product_id FROM {$wpdb->prefix}wc_product_meta_lookup WHERE %1s", $where_clause ) ); } // phpcs:enable return $results; }