WC_Product_Variable_Data_Store_CPT::child_has_stock_status()publicWC 3.3.0

Does a child have a stock status?

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

Хуков нет.

Возвращает

true|false.

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

$WC_Product_Variable_Data_Store_CPT = new WC_Product_Variable_Data_Store_CPT();
$WC_Product_Variable_Data_Store_CPT->child_has_stock_status( $product, $status );
$product(WC_Product) (обязательный)
Product object.
$status(строка) (обязательный)
'instock', 'outofstock', or 'onbackorder'.

Список изменений

С версии 3.3.0 Введена.

Код WC_Product_Variable_Data_Store_CPT::child_has_stock_status() WC 8.7.0

public function child_has_stock_status( $product, $status ) {
	global $wpdb;

	$children = $product->get_children();

	if ( $children ) {
		$format     = array_fill( 0, count( $children ), '%d' );
		$query_in   = '(' . implode( ',', $format ) . ')';
		$query_args = array( 'stock_status' => $status ) + $children;
		// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
		if ( get_option( 'woocommerce_product_lookup_table_is_generating' ) ) {
			$query = "SELECT COUNT( post_id ) FROM {$wpdb->postmeta} WHERE meta_key = '_stock_status' AND meta_value = %s AND post_id IN {$query_in}";
		} else {
			$query = "SELECT COUNT( product_id ) FROM {$wpdb->wc_product_meta_lookup} WHERE stock_status = %s AND product_id IN {$query_in}";
		}
		$children_with_status = $wpdb->get_var(
			$wpdb->prepare(
				$query,
				$query_args
			)
		);
		// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
	} else {
		$children_with_status = 0;
	}

	return (bool) $children_with_status;
}