Create new product attribute programmatically in Woocommerce

后端 未结 2 606
我在风中等你
我在风中等你 2020-11-28 12:05

How can I create attributes for WooCommerce from a plugin? I find only :

wp_set_object_terms( $object_id, $terms, $taxonomy, $append);

Fro

2条回答
  •  我在风中等你
    2020-11-28 12:55

    For Woocommerce 3+ (2018)

    To create a new product attribute from a label name use the following function:

    function create_product_attribute( $label_name ){
        global $wpdb;
    
        $slug = sanitize_title( $label_name );
    
        if ( strlen( $slug ) >= 28 ) {
            return new WP_Error( 'invalid_product_attribute_slug_too_long', sprintf( __( 'Name "%s" is too long (28 characters max). Shorten it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
        } elseif ( wc_check_if_attribute_name_is_reserved( $slug ) ) {
            return new WP_Error( 'invalid_product_attribute_slug_reserved_name', sprintf( __( 'Name "%s" is not allowed because it is a reserved term. Change it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
        } elseif ( taxonomy_exists( wc_attribute_taxonomy_name( $label_name ) ) ) {
            return new WP_Error( 'invalid_product_attribute_slug_already_exists', sprintf( __( 'Name "%s" is already in use. Change it, please.', 'woocommerce' ), $label_name ), array( 'status' => 400 ) );
        }
    
        $data = array(
            'attribute_label'   => $label_name,
            'attribute_name'    => $slug,
            'attribute_type'    => 'select',
            'attribute_orderby' => 'menu_order',
            'attribute_public'  => 0, // Enable archives ==> true (or 1)
        );
    
        $results = $wpdb->insert( "{$wpdb->prefix}woocommerce_attribute_taxonomies", $data );
    
        if ( is_wp_error( $results ) ) {
            return new WP_Error( 'cannot_create_attribute', $results->get_error_message(), array( 'status' => 400 ) );
        }
    
        $id = $wpdb->insert_id;
    
        do_action('woocommerce_attribute_added', $id, $data);
    
        wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
    
        delete_transient('wc_attribute_taxonomies');
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.


    Based on:

    • Product Attribute wc_create_attribute() function code (Woocommerce 3.2+).
    • Create programmatically a variable product and two new attributes in Woocommerce

    Related: Create programmatically a product using CRUD methods in Woocommerce 3

提交回复
热议问题