Woocommerce - 自定义功能仅在更新购物车上运行
Woocommerce - custom functions runs only on update cart
我写了一个非常小的函数来禁用安装作为一种方法(来自 table 运费插件)如果产品不在购物车中或者如果购物车中该产品的数量少于 6 .
这有效,但仅当我单击 "update cart" 按钮时有效,例如,当我单击购物车时无效。
这是函数,直接来自我自定义主题中的 function.php 文件:
function disable_installation_for_less_than( $rates ) {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$installation = $rates['table_rate_shipping_installation'];
foreach ( $items as $item => $values ) {
$productID = $values['product_id'];
$productQuantity = $values['quantity'];
unset( $rates['table_rate_shipping_installation'] );
if ( $productID == 2412 ) {
if ( $productQuantity < 6 ) {
unset( $rates['table_rate_shipping_installation'] );
} else {
array_push($rates, $installation);
}
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'disable_installation_for_less_than', 10, 3 );
知道为什么吗?我用错钩子了吗?
感谢您的帮助
此外,与其取消设置并仅在需要时重新设置,有没有更好的方式说 "if this product is NOT in the cart" 然后删除它?
谢谢
好的,我是这样解决的:
function disable_installation_for_less_than( $rates ) {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$showInstallation= false;
foreach ( $items as $item => $values ) {
$productID = $values['product_id'];
$productQuantity = $values['quantity'];
if ( $productID == 2412 ) {
$showInstallation= true;
if ( $productQuantity < 6 ) {
unset( $rates['table_rate_shipping_installation'] );
}
}
}
if ($showInstallation== false){
unset( $rates['table_rate_shipping_installation'] );
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'disable_installation_for_less_than', 10, 2 );
现在可以使用了。
我写了一个非常小的函数来禁用安装作为一种方法(来自 table 运费插件)如果产品不在购物车中或者如果购物车中该产品的数量少于 6 .
这有效,但仅当我单击 "update cart" 按钮时有效,例如,当我单击购物车时无效。
这是函数,直接来自我自定义主题中的 function.php 文件:
function disable_installation_for_less_than( $rates ) {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$installation = $rates['table_rate_shipping_installation'];
foreach ( $items as $item => $values ) {
$productID = $values['product_id'];
$productQuantity = $values['quantity'];
unset( $rates['table_rate_shipping_installation'] );
if ( $productID == 2412 ) {
if ( $productQuantity < 6 ) {
unset( $rates['table_rate_shipping_installation'] );
} else {
array_push($rates, $installation);
}
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'disable_installation_for_less_than', 10, 3 );
知道为什么吗?我用错钩子了吗? 感谢您的帮助
此外,与其取消设置并仅在需要时重新设置,有没有更好的方式说 "if this product is NOT in the cart" 然后删除它?
谢谢
好的,我是这样解决的:
function disable_installation_for_less_than( $rates ) {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$showInstallation= false;
foreach ( $items as $item => $values ) {
$productID = $values['product_id'];
$productQuantity = $values['quantity'];
if ( $productID == 2412 ) {
$showInstallation= true;
if ( $productQuantity < 6 ) {
unset( $rates['table_rate_shipping_installation'] );
}
}
}
if ($showInstallation== false){
unset( $rates['table_rate_shipping_installation'] );
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'disable_installation_for_less_than', 10, 2 );
现在可以使用了。