添加到购物车后,我需要更改产品的重量。权重取决于产品属性“ quantite-avec-fenetre”。
基于Change cart items weight to update the shipping costs in Woocommerce,我试图在主题的functions.php文件中使用以下功能:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_weight', 10, 1);
function add_custom_weight( $cart_object ) {
foreach ( $cart_object->get_cart() as $cart_item ) {
//very simplified example - every item in cart will be 100 kg
$attr = $cart_item['data']->get_attributes();
if ($cart_item['data']->get_SKU() == "PSP229AFSF") {
$qtySF = $attr["pa_quantite-sans-fenetre"];
$qtyAF = $attr["pa_quantite-avec-fenetre"];
var_dump($attr);
//echo $qtyAF;
//echo $qtySF;
//echo "oll";
}
//echo $attr["pa_impressiont"];
//$cart_item['data']->set_weight( 0.001 );
}
// Testing: cart weight output
}
回声和看起来很奇怪的东西仅供测试。 因此,此展示带有var_dump的购物车中每个产品的所有属性(具有PSP229AFSF的SKU)。
问题是我设置了属性,我将其添加到购物车,在购物车中,我的属性ith值很高,但是他var_dump将此返回给我:
array(7) { ["pa_impression"]=> string(15) "sans-impression" ["pa_impressionrecto"]=> string(11) "1couleurpms" ["pa_impressionverso"]=> string(12) "sansimpverso" ["pa_fichierimpr"]=> string(12) "designertool" ["pa_bat"]=> string(3) "non" ["pa_quantite-avec-fenetre"]=> string(0) "" ["pa_quantite-sans-fenetre"]=> string(0) "" }
如您所见,属性“ pa_quantite-avec-fenetre”和“ pa_quantite-sans-fenetre”为空。
这是我的购物车显示的内容(购物车的屏幕截图):
因此该属性在购物车中设置得很好,但是在$cart_item
中似乎不可用。
我尝试过没有会影响属性,效果相同的插件,对它的来源有任何想法吗?
答案 0 :(得分:0)
您需要从购物车项目(而不是从产品本身)获取差异产品属性数据。
所以尝试一下:
add_action( 'woocommerce_before_calculate_totals', 'custom_cart_item_weight', 10, 1);
function custom_cart_item_weight( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
foreach ( $cart_object->get_cart() as $cart_item ) {
if ( $cart_item['data']->get_sku() == "PSP229AFSF" ) {
$attributes = $cart_item['variation'];
$attr_key = 'attribute_pa_';
if( isset($attributes[$attr_key.'impression']) )
$attr_imp = $attributes[$attr_key.'impression'];
if( isset($attributes[$attr_key.'impressionrecto']) )
$attr_imp_rec = $attributes[$attr_key.'impressionrecto'];
if( isset($attributes[$attr_key.'impressionverso']) )
$attr_imp_ver = $attributes[$attr_key.'impressionverso'];
if( isset($attributes[$attr_key.'fichierimpr']) )
$attr_fich_imp = $attributes[$attr_key.'fichierimpr'];
if( isset($attributes[$attr_key.'bat']) )
$attr_bat = $attributes[$attr_key.'bat'];
if( isset($attributes[$attr_key.'quantite-sans-fenetre']) )
$attr_qte_sf = $attributes[$attr_key.'quantite-sans-fenetre'];
if( isset($attributes[$attr_key.'quantite-avec-fenetre']) )
$attr_qte_af = $attributes[$attr_key.'quantite-avec-fenetre'];
## Make your weight calculations ##
$new_weight = 1; // <=== Make your calculated weight
$cart_item['data']->set_weight( $new_weight ); // Set the calculated weight
}
}
}
代码进入您的活动子主题(或活动主题)的function.php文件中。应该会更好。