2015-11-21 2 views
0

У меня есть функция, которая должна создать вариацию и заполнить вариацию значениями, атрибутами переменной продукта. Чтобы стать более гибким, я не создавал значения для атрибутов продуктов, кромеКак передать переменные атрибутам вариациям продукта переменной Woocomerce?

Я пробовал сотни способов, чтобы значения придерживались вариации, но они не используются. Вариант создается в бэкэнд, но он не имеет ни одного из значений, присвоенных ?????? PLEEEEASE HELP !!!! Im на этом уже 4 дня. (

Единственные значения, относящиеся к атрибутам продукта: «>> EMPTY < <» значение.///////////// Переменные $ Данные -> Array (Key -> Value), так что ключи == к продукции atributes $ продукта -> $ product_id

function add_variable_product_to_cart($product_id, $data) { 

$my_post = array(
    'post_title'=> 'Order_Printaway', 
    'post_name' => 'product_' . $data["itemIdentifier"], 
    'post_status' => 'publish', 
    'post_parent' => $product_id ,//post is a child post of product post 
    'post_type' => 'product_variation',//set post type to product_variation 
    'guid'=>home_url() . '/?product_variation=product_' . $data["itemIdentifier"] 
); 

//Insert ea. post/variation into database: 
$attID = wp_insert_post($my_post);  

update_post_meta($attID, '_price', $data["final_price"]); 
update_post_meta($attID, '_regular_price', $data["final_price"]); 

foreach($data as $key => $value){ 

    $avail_attributes = array($value); 
    wp_set_object_terms($product_id, $avail_attributes, $key); 

    $thedata[$key]['name'] = $value; 

} 

update_post_meta($attID,'_product_attributes',$thedata); 

if (! is_admin()) { 
    $found = false; 
    //check if product already in cart 
    if (sizeof(WC()->cart->get_cart()) > 0) { 
     // if product not found, add it 
     if (! $found){ 
      WC()->cart->add_to_cart($product_id, 1, $attID); 

     } 
    } 
    else{ 
     // if no products in cart, add it 
     WC()->cart->add_to_cart($product_id, 1, $attID); 
    } 
} 
} 

/////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////////// ВЫВОД ///////////// ////////////////////////////////////////////////// ///////

// Atributes продукта ->

Array ([a_color] => Array ([имя] => a_color [значение] => >> EMPTY < < [позиция ] => 0 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_creasing] => Array ([name] => a_creasing [значение] => >> EMPTY < < [position] => 1 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_finishing] => Array ([name] => a_finishing [значение] => >> EMPTY < < [position] => 2 [is_visible] => 0 [is_variation] => 1 [ is_taxonomy] => 0) [a_finishing_desc] => Array ([name] => a_finishing_desc [значение] => >> EMPTY < < [position] => 3 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_format_dir] => Array ([name] => a_format_dir [значение] => >> EMPTY < < [position] => 4 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_page] => Массив ([name] => a_page [значение] => >> EMPTY < < [position] => 5 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [бумага] => Array ([name] => a_paper [value] => >> EMPTY < < [position] => 6 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_paper_desc] => Массив ([name] => a_paper_desc [значение] => >> EMPTY < < [позиция] => 7 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_perforation] => Массив ([name] => a_perforation [значение] => >> EMPTY < < [position] => 8 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [a_processing] => Array ([name ] => a_processing [значение] => >> EMPTY < < [position] => 9 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [product] => Array ([name] = > product [value] => >> EMPTY < < [position] => 10 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0) [shipping] => Array ([name] => shipping [значение] => >> EMPTY < < [положение] => 11 [is_visible] => 0 [is_variation] => 1 [is_taxonomy] => 0))

//// массив данных, которые я пытаюсь ввести в Вариация

Array ([languageCode] => Array ([name] => en) [countryCode] => Array ([name] => GB) [saveItem] => Array ([name] => сохранить элемент по name) [itemIdentifier] => Array ([name] => asdasadasds) [product] => Array ([name] => flyer) [a_page] => Array ([name] => A_1stg) [a_format] => Array ([name] => A_105_x_148_mm_DIN-A-6) [a_format_dir] => Array ([name] => A_panel_format) [a_paper] => Массив ([name] => A_115gqm_Bilderdruck) [a_paper_desc] => Массив ([имя] => A_paper_gloss_no_core) [a_color] => Массив ([имя] => A_4/0-farbig_Euroskala) [ a_finishing] => Array ([name] => A_Ohne_Finishing) [a_finishing_desc] => Array ([name] => A_Ohne_Veredelung) [a_processing] => Array ([name] => A_Cutt) [a_creasing] => Array ([name ] => A_No_Groove) [a_perforation] => Array ([name] => A_No_Perfo) [quantity] => Array ([name] => 100_quantity) [shipping] => Array ([name] => standard) [priceNet] => Array ([name] => 8,31) [priceGross] => Array ([name] => 9,97) [shippingNet] => Array ([name] => 4,13) [отправкаGross] => Array ([name] => 4,96) [final_price] => Array ([name] => 17.916)) Атрибуты вариации после get_post_meta (757, '_product_attributes', true)) Array ([0] => Array ([languageCode] => Array ([name] => en) [countryCode] => Array ([ name] => GB) [saveItem] => Array ([name] => сохранить элемент по имени) [itemIdentifier] => Array ([name] => asdasadasds) [product] => Array ([name] => flyer) [a_page] => Массив ([name] => A_1stg) [a_format] => Массив ([name] => A_105_x_148_mm_DIN-A-6) [a_format_dir] => Массив ([имя] => A_panel_format) [a_paper] => Array ([name] => A_115gqm_Bilderdruck) [a_paper_desc] => Массив ([name] => A_paper_gloss_no_core) [a_color] => Массив ([name] => A_4/0-farbig_Euroskala) [a_finishing] => Массив ([name] => A_Ohne_Finishing) [a_finishing_desc] => Array ([name] => A_Ohne_Veredelung) [a_processing] => Array ([name] => A_Cutt) [a_creasing] => Array ([name] => A_No_Groove) [ a_perforation] => Array ([name] => A_No_Perfo) [quantity] => Array ([name] => 100_quantity) [shipping] => Array ([name] => standard) [priceNet] => Array ([name] => 8,31) [priceGross] => Array ([name] => 9,97) [shippingNet] => Array ([name] => 4,13) [ ([name] => 4,96) [final_price] => Array ([name] => 17.916)))

ответ

0

Я боролся с той же проблемой, и ключ был в таксономиях атрибутов.

Если атрибут, обозначенный как таксономия, для этого требуется slug вместо строки для текстовых attrs. Итак, во-первых, отметьте

 if ($attribute['is_taxonomy']) { 
      $options = wc_get_product_terms($post_id, $attribute['name'], array('fields' => 'slugs')); 
     } else { 
      $options = explode(WC_DELIMITER, $attribute['value']); 
     } 

и заполните $ attr_val путём или строковым значением.

update_post_meta($post_id, 'attribute_' . sanitize_title($attribute['name']), $attr_val); 

WC_AJAX::save_attributes() может быть полезным

+0

Спасибо. , , Я дам ему попробовать! –

Смежные вопросы