WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WC_Product_Variation_Data_Store_CPT::update_attributes() protected WC 3.0.0

Update attribute meta values.

Это метод класса: WC_Product_Variation_Data_Store_CPT{}

Хуков нет.

Возвращает

Null. Ничего.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->update_attributes( $product, $force );
$product(WC_Product) (обязательный) (передается по ссылке — &)
Product object.
$force(true/false)
Force update. Used during create.
По умолчанию: false

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

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

Код WC_Product_Variation_Data_Store_CPT::update_attributes() WC 4.5.2

woocommerce/includes/data-stores/class-wc-product-variation-data-store-cpt.php
<?php
protected function update_attributes( &$product, $force = false ) {
	$changes = $product->get_changes();

	if ( $force || array_key_exists( 'attributes', $changes ) ) {
		global $wpdb;

		$product_id             = $product->get_id();
		$attributes             = $product->get_attributes();
		$updated_attribute_keys = array();
		foreach ( $attributes as $key => $value ) {
			update_post_meta( $product_id, 'attribute_' . $key, wp_slash( $value ) );
			$updated_attribute_keys[] = 'attribute_' . $key;
		}

		// Remove old taxonomies attributes so data is kept up to date - first get attribute key names.
		$delete_attribute_keys = $wpdb->get_col(
			$wpdb->prepare(
				// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration
				"SELECT meta_key FROM {$wpdb->postmeta} WHERE meta_key LIKE %s AND meta_key NOT IN ( '" . implode( "','", array_map( 'esc_sql', $updated_attribute_keys ) ) . "' ) AND post_id = %d",
				$wpdb->esc_like( 'attribute_' ) . '%',
				$product_id
			)
		);

		foreach ( $delete_attribute_keys as $key ) {
			delete_post_meta( $product_id, $key );
		}

		// Set the attributes as regular taxonomy terms too...
		$variation_attributes = array_keys( $product->get_variation_attributes( false ) );
		foreach ( $attributes as $name => $value ) {
			$value = strval( $value );
			if ( '' !== $value && in_array( $name, $variation_attributes, true ) && term_exists( $value, $name ) ) {
				wp_set_post_terms( $product_id, array( $value ), $name );
			} elseif ( taxonomy_exists( $name ) ) {
				wp_delete_object_term_relationships( $product_id, $name );
			}
		}

		// ...and remove old taxonomy terms.
		$attributes_to_delete = array_diff( wc_get_attribute_taxonomy_names(), array_keys( $attributes ) );
		wp_delete_object_term_relationships( $product_id, $attributes_to_delete );
	}
}