ies[ $new_taxonomy_name ] ) ) { $wp_taxonomies[ $new_taxonomy_name ] = $wp_taxonomies[ $old_taxonomy_name ]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited } }//end if }//end if // Clear cache and flush rewrite rules. wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); delete_transient( 'wc_attribute_taxonomies' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' ); return $id; } /** * Update an attribute. * * For available args see wc_create_attribute(). * * @since 3.2.0 * @param int $id Attribute ID. * @param array $args Attribute arguments. * @return int|WP_Error */ function wc_update_attribute( $id, $args ) { global $wpdb; $attribute = wc_get_attribute( $id ); $args['id'] = $attribute ? $attribute->id : 0; // When updating an existing attribute, populate any undefined args with the existing value. // This prevents those values from being reset to their respective defaults. if ( $args['id'] ) { $args['has_archives'] = $args['has_archives'] ?? $attribute->has_archives; $args['name'] = $args['name'] ?? $attribute->name; $args['order_by'] = $args['order_by'] ?? $attribute->order_by; $args['slug'] = $args['slug'] ?? $attribute->slug; $args['type'] = $args['type'] ?? $attribute->type; } if ( $args['id'] && empty( $args['name'] ) ) { $args['name'] = $attribute->name; } $args['old_slug'] = $wpdb->get_var( $wpdb->prepare( " SELECT attribute_name FROM {$wpdb->prefix}woocommerce_attribute_taxonomies WHERE attribute_id = %d ", $args['id'] ) ); return wc_create_attribute( $args ); } /** * Delete attribute by ID. * * @since 3.2.0 * @param int $id Attribute ID. * @return bool */ function wc_delete_attribute( $id ) { global $wpdb; $name = $wpdb->get_var( $wpdb->prepare( " SELECT attribute_name FROM {$wpdb->prefix}woocommerce_attribute_taxonomies WHERE attribute_id = %d ", $id ) ); $taxonomy = wc_attribute_taxonomy_name( $name ); /** * Before deleting an attribute. * * @param int $id Attribute ID. * @param string $name Attribute name. * @param string $taxonomy Attribute taxonomy name. */ do_action( 'woocommerce_before_attribute_delete', $id, $name, $taxonomy ); if ( $name && $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_attribute_taxonomies WHERE attribute_id = %d", $id ) ) ) { if ( taxonomy_exists( $taxonomy ) ) { $terms = get_terms( $taxonomy, 'orderby=name&hide_empty=0' ); foreach ( $terms as $term ) { wp_delete_term( $term->term_id, $taxonomy ); } } /** * After deleting an attribute. * * @param int $id Attribute ID. * @param string $name Attribute name. * @param string $taxonomy Attribute taxonomy name. */ do_action( 'woocommerce_attribute_deleted', $id, $name, $taxonomy ); wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' ); delete_transient( 'wc_attribute_taxonomies' ); WC_Cache_Helper::invalidate_cache_group( 'woocommerce-attributes' ); return true; }//end if return false; } /** * Get an unprefixed product attribute name. * * @since 3.6.0 * * @param string $attribute_name Attribute name. * @return string */ function wc_attribute_taxonomy_slug( $attribute_name ) { $prefix = WC_Cache_Helper::get_cache_prefix( 'woocommerce-attributes' ); $cache_key = $prefix . 'slug-' . $attribute_name; $cache_value = wp_cache_get( $cache_key, 'woocommerce-attributes' ); if ( false !== $cache_value ) { return $cache_value; } $attribute_name = wc_sanitize_taxonomy_name( $attribute_name ); $attribute_slug = 0 === strpos( $attribute_name, 'pa_' ) ? substr( $attribute_name, 3 ) : $attribute_name; wp_cache_set( $cache_key, $attribute_slug, 'woocommerce-attributes' ); return $attribute_slug; }