出于某种原因,Woocommerce似乎不希望你这么做。不知道为什么,因为在许多情况下,要求手动执行是一个可伸缩性问题(更不用说,如果您的属性有很多可能的值,那么它们提供的接口加载速度非常慢)。在挖掘了一些之后,下面是管理页面使用的私有函数,为系统调用进行了修改。
function process_add_attribute($attribute)
{
global $wpdb;
// check_admin_referer( \'woocommerce-add-new_attribute\' );
if (empty($attribute[\'attribute_type\'])) { $attribute[\'attribute_type\'] = \'text\';}
if (empty($attribute[\'attribute_orderby\'])) { $attribute[\'attribute_orderby\'] = \'menu_order\';}
if (empty($attribute[\'attribute_public\'])) { $attribute[\'attribute_public\'] = 0;}
if ( empty( $attribute[\'attribute_name\'] ) || empty( $attribute[\'attribute_label\'] ) ) {
return new WP_Error( \'error\', __( \'Please, provide an attribute name and slug.\', \'woocommerce\' ) );
} elseif ( ( $valid_attribute_name = valid_attribute_name( $attribute[\'attribute_name\'] ) ) && is_wp_error( $valid_attribute_name ) ) {
return $valid_attribute_name;
} elseif ( taxonomy_exists( wc_attribute_taxonomy_name( $attribute[\'attribute_name\'] ) ) ) {
return new WP_Error( \'error\', sprintf( __( \'Slug "%s" is already in use. Change it, please.\', \'woocommerce\' ), sanitize_title( $attribute[\'attribute_name\'] ) ) );
}
$wpdb->insert( $wpdb->prefix . \'woocommerce_attribute_taxonomies\', $attribute );
do_action( \'woocommerce_attribute_added\', $wpdb->insert_id, $attribute );
flush_rewrite_rules();
delete_transient( \'wc_attribute_taxonomies\' );
return true;
}
function valid_attribute_name( $attribute_name ) {
if ( strlen( $attribute_name ) >= 28 ) {
return new WP_Error( \'error\', sprintf( __( \'Slug "%s" is too long (28 characters max). Shorten it, please.\', \'woocommerce\' ), sanitize_title( $attribute_name ) ) );
} elseif ( wc_check_if_attribute_name_is_reserved( $attribute_name ) ) {
return new WP_Error( \'error\', sprintf( __( \'Slug "%s" is not allowed because it is a reserved term. Change it, please.\', \'woocommerce\' ), sanitize_title( $attribute_name ) ) );
}
return true;
}
要求如下:
$insert = proccess_add_attribute(array(\'attribute_name\' => \'my-new-slug\', \'attribute_label\' => \'my-new-attribute\', \'attribute_type\' => \'text\', \'attribute_orderby\' => \'menu_order\', \'attribute_public\' => false));
if (is_wp_error($insert)) { do_something_for_error($insert); }
与属性相关的字段包括名称(标准wp slug)、标签(属性名称的人类可读版本)、类型(您可以在“选择”和“文本”之间进行选择,但如果您是系统创建的,您可能希望文本我将函数改为默认)、公共(在接口中标记为“启用存档”,我将函数默认为接口默认值),和orderby(选项包括“menu\\u order”(在界面中称为“Custom ordering”)、“name”(自解释)、“name\\u num”(数字名称)和“id”(术语id))