为 Woocommerce 中的特定自定义字段值启用仅免费送货方式
Enable only free shipping method for a specific custom field value in Woocommerce
我正在尝试将如下代码添加到 functions.php 文件中。总体功能是检查购物车中的产品及其名为 auto_delivery_default 的自定义字段 (post_meta)。
如果自定义字段中的特定文本则仅显示免费送货,如果所有其他文本则显示所有其他送货方式。
这是我到目前为止得到的结果,但我忽略了一些导致它无法正常运行的东西;
function show_free_ship_to_autodelivery ( $autodelivery_rate ) {
$autodelivery_free = array();
foreach( WC()->cart->get_cart() as $cart_item ){
$product = $cart_item['data'];
$product_id = $product->get_id(); // get the product ID
$autodelivery = get_post_meta( $product->get_id(), 'auto_delivery_default', true );
if( $autodelivery == "90 Days" ) {
$autodeliveryfree = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$autodelivery_free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $autodelivery_free ) ? $autodelivery_free : $autodelivery_rate;
}
}
}
add_filter( 'woocommerce_package_rates', 'show_free_ship_to_autodelivery', 10);
您的代码中存在一些错误和错误……相反,请尝试以下方法,当提供免费送货服务且带有自定义字段 auto_delivery_default
的购物车商品的值为 90 Days
:
add_filter( 'woocommerce_package_rates', 'show_only_free_shipping_for_autodelivery', 100, 2 );
function show_only_free_shipping_for_autodelivery ( $rates, $package ) {
// Loop through cart items
foreach( $package['contents'] as $cart_item ){
if( $cart_item['data']->get_meta('auto_delivery_default') == '90 Days' ) {
$found = true;
break; // Stop the loop
}
}
if( ! ( isset($found) && $found ) )
return $rates; // Exit
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我正在尝试将如下代码添加到 functions.php 文件中。总体功能是检查购物车中的产品及其名为 auto_delivery_default 的自定义字段 (post_meta)。
如果自定义字段中的特定文本则仅显示免费送货,如果所有其他文本则显示所有其他送货方式。
这是我到目前为止得到的结果,但我忽略了一些导致它无法正常运行的东西;
function show_free_ship_to_autodelivery ( $autodelivery_rate ) {
$autodelivery_free = array();
foreach( WC()->cart->get_cart() as $cart_item ){
$product = $cart_item['data'];
$product_id = $product->get_id(); // get the product ID
$autodelivery = get_post_meta( $product->get_id(), 'auto_delivery_default', true );
if( $autodelivery == "90 Days" ) {
$autodeliveryfree = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$autodelivery_free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $autodelivery_free ) ? $autodelivery_free : $autodelivery_rate;
}
}
}
add_filter( 'woocommerce_package_rates', 'show_free_ship_to_autodelivery', 10);
您的代码中存在一些错误和错误……相反,请尝试以下方法,当提供免费送货服务且带有自定义字段 auto_delivery_default
的购物车商品的值为 90 Days
:
add_filter( 'woocommerce_package_rates', 'show_only_free_shipping_for_autodelivery', 100, 2 );
function show_only_free_shipping_for_autodelivery ( $rates, $package ) {
// Loop through cart items
foreach( $package['contents'] as $cart_item ){
if( $cart_item['data']->get_meta('auto_delivery_default') == '90 Days' ) {
$found = true;
break; // Stop the loop
}
}
if( ! ( isset($found) && $found ) )
return $rates; // Exit
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。