Automattic\WooCommerce\Internal\Integrations

WPPostsImporter::register_product_attribute_taxonomiespublicWC 10.1.0

Register product attribute taxonomies when importing posts via the WXR importer.

Method of the class: WPPostsImporter{}

Returns

Array.

Usage

$WPPostsImporter = new WPPostsImporter();
$WPPostsImporter->register_product_attribute_taxonomies( $posts );
$posts(array) (required)
The posts to process.

Changelog

Since 10.1.0 Introduced.

WPPostsImporter::register_product_attribute_taxonomies() code WC 10.3.3

public function register_product_attribute_taxonomies( $posts ) {
	if ( ! is_array( $posts ) || empty( $posts ) ) {
		return $posts;
	}

	foreach ( $posts as $post ) {

		if ( 'product' !== $post['post_type'] || empty( $post['terms'] ) ) {
			continue;
		}

		foreach ( $post['terms'] as $term ) {
			if ( ! strstr( $term['domain'], 'pa_' ) ) {
				continue;
			}

			if ( taxonomy_exists( $term['domain'] ) ) {
				continue;
			}

			$attribute_name = wc_attribute_taxonomy_slug( $term['domain'] );

			// Create the taxonomy.
			if ( ! in_array( $attribute_name, wc_get_attribute_taxonomies(), true ) ) {
				wc_create_attribute(
					array(
						'name'         => $attribute_name,
						'slug'         => $attribute_name,
						'type'         => 'select',
						'order_by'     => 'menu_order',
						'has_archives' => false,
					)
				);
			}

			// Register the taxonomy so that the import works.
			register_taxonomy(
				$term['domain'],
				// phpcs:ignore
				apply_filters( 'woocommerce_taxonomy_objects_' . $term['domain'], array( 'product' ) ),
				// phpcs:ignore
				apply_filters(
					'woocommerce_taxonomy_args_' . $term['domain'],
					array(
						'hierarchical' => true,
						'show_ui'      => false,
						'query_var'    => true,
						'rewrite'      => false,
					)
				)
			);
		}
	}

	return $posts;
}