Я импортирую товары с глобальными атрибутами, создаю атрибут, если атрибут еще не существует. ниже - функция, которую я использую для создания атрибутов.
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' );
//set_transient('wc_attribute_taxonomies');
return true;
}
...
foreach(attributes as attribute){
$taxonomy = 'pa_'.
$name = $attribute->name;
$slug = sanitize_title($attribute->name);
$taxonomy = 'pa_'.$slug;
if ( ! taxonomy_exists($taxonomy) ) { process_add_attribute(array('attribute_name' => $slug, 'attribute_label' => $name, 'attribute_type' => 'text', 'attribute_orderby' => 'menu_order', 'attribute_public' => true));}
foreach ($attribute->options as $option) { wp_insert_term($option,$taxonomy,array('description'=> '','slug' => sanitize_title($option)));}
}
два вопроса здесь
1) когда этот код запускается в первый раз, он просто создает атрибуты, а не термины. когда я снова запускаю этот код, он создает условия ..
Другими словами, термины добавляются только тогда, когда атрибуты уже есть. почему?
2) Я добавляю атрибуты с включенным архивом. когда я захожу на страницу архива атрибутов, выдается ошибка 404. и когда я иду редактировать атрибут из раздела администратора и нажимаю кнопку «Сохранить» вручную, ссылки начинают работать без ошибок.
этот код работает в scheduled event
.