如何为 WooCommerce 购物车中的不同产品添加额外费用
How to add additional fees to different products in WooCommerce cart
我使用此代码向特定产品 ID 添加额外费用。问题是我只能向不同的产品 ID 添加一笔费用。
add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
if (is_admin() && !defined
('DOING_AJAX')) {return;}
foreach( WC()->cart->get_cart() as $item_keys => $item ) {
if( in_array( $item['product_id'],
fee_ids() )) {
WC()->cart->add_fee(__('ADDITIONAL FEE:'), 5);
}
}
}
function fee_ids() {
return array( 2179 );
}
我需要为不同的产品添加不同的费用 - 例如:
- 产品 ID 为 1234 的产品 1 将收取“xx”额外费用。
- 产品 ID 为 5678 的产品 2 将收取“xx”额外费用。
使用此代码,我可以为不同的产品设置一个费用。如何在 WooCommerce 中为不同的产品添加不同的费用?
我。您可以为此使用 WordPress 插件 "Advanced Custom Fields:
- 安装插件
- 设置一个标题为“Product with fee”的字段组,并将其位置规则设置为“Post Type”=>“等于”=>“Product”
- “字段类型”“文本”的“+添加字段”并注意其“名称”(不是“标签”)以供以后检查,例如“费用”
- 在该费用元字段的适当 WooCommerce 产品帖子中设置费用值
- 在您的
'woocommerce_cart_calculate_fees'
钩子回调循环中购物车产品并检查具有名为“费用”的元字段的设置值的产品,并在该条件下添加您的费用添加代码:
if (get_field( "fee" )) { // get_field() returns false if empty aka not set from admin area
// fee adding code for single product in cart
};
二.或者您可以通过添加和显示 WooCommerce 自定义产品元字段来实现这一点,如此处详述:
https://www.cloudways.com/blog/add-custom-product-fields-woocommerce/
大家好,谢谢大家!
我找到了解决问题的办法。我只是多次复制下面描述的代码,因为我对不同的产品有不同的数量并更改它:
add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
if (is_admin() && !defined
('DOING_AJAX')) {return;}
foreach( WC()->cart->get_cart() as $item_keys => $item ) {
if( in_array( $item['product_id'],
fee_ids() )) {
WC()->cart->add_fee(__('ADDITIONAL FEE:'), 5);
}
}
}
function fee_ids() {
return array( 2179 );
}
我将 add_fees_on_ids
更改为 add_fees_on_ids_1
,将 fee_ids
更改为 fee_ids_1
和 ADDITIONAL FEE:
到 ADDITIONAL FEE 1:
我知道对于某些人来说它可能看起来不专业,但它是解决我的问题的方法。
有几种方法。例如,您确实可以 .
不过也不必太复杂,为此安装一个额外的插件太牵强了!
多次添加相同的代码也是一个坏主意,因为那样您将多次浏览购物车。这不仅会减慢您的网站速度,而且最终会导致错误。
在我看来,添加一个数组,您不仅可以确定产品 ID,还可以根据数组键立即确定额外费用,这是最简单有效的方法。
所以你得到:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Add in the following way: Additional fee => Product ID
$settings = array(
10 => 1234,
20 => 5678,
5 => 30,
2 => 815,
);
// Initialize
$additional_fee = 0;
// Loop through cart contents
foreach ( $cart->get_cart_contents() as $cart_item ) {
// Get product id
$product_id = $cart_item['product_id'];
// In array, get the key as well
if ( false !== $key = array_search( $product_id, $settings ) ) {
$additional_fee += $key;
}
}
// If greater than 0, so a matching product ID was found in the cart
if ( $additional_fee > 0 ) {
// Add additional fee (total)
$cart->add_fee( __( 'Additional fee', 'woocommerce' ), $additional_fee, false );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
可选:
要单独显示每个费用的加法,让客户知道哪个费用是指哪个产品,可以使用多维数组。
将必要的信息添加到设置数组,其他一切都会自动发生。
所以你得到:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Settings
$settings = array(
array(
'product_id' => 30,
'amount' => 5,
'name' => __( 'Additional service fee', 'woocommerce' ),
),
array(
'product_id' => 813,
'amount' => 10,
'name' => __( 'Packing fee', 'woocommerce' ),
),
array(
'product_id' => 815,
'amount' => 15,
'name' => __( 'Another fee', 'woocommerce' ),
),
);
// Loop through cart contents
foreach ( $cart->get_cart_contents() as $cart_item ) {
// Get product id
$product_id = $cart_item['product_id'];
// Loop trough settings array
foreach ( $settings as $setting ) {
// Search for the product ID
if ( $setting['product_id'] == $product_id ) {
// Add fee
$cart->add_fee( $setting['name'], $setting['amount'], false );
}
}
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
相关:
我使用此代码向特定产品 ID 添加额外费用。问题是我只能向不同的产品 ID 添加一笔费用。
add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
if (is_admin() && !defined
('DOING_AJAX')) {return;}
foreach( WC()->cart->get_cart() as $item_keys => $item ) {
if( in_array( $item['product_id'],
fee_ids() )) {
WC()->cart->add_fee(__('ADDITIONAL FEE:'), 5);
}
}
}
function fee_ids() {
return array( 2179 );
}
我需要为不同的产品添加不同的费用 - 例如:
- 产品 ID 为 1234 的产品 1 将收取“xx”额外费用。
- 产品 ID 为 5678 的产品 2 将收取“xx”额外费用。
使用此代码,我可以为不同的产品设置一个费用。如何在 WooCommerce 中为不同的产品添加不同的费用?
我。您可以为此使用 WordPress 插件 "Advanced Custom Fields:
- 安装插件
- 设置一个标题为“Product with fee”的字段组,并将其位置规则设置为“Post Type”=>“等于”=>“Product”
- “字段类型”“文本”的“+添加字段”并注意其“名称”(不是“标签”)以供以后检查,例如“费用”
- 在该费用元字段的适当 WooCommerce 产品帖子中设置费用值
- 在您的
'woocommerce_cart_calculate_fees'
钩子回调循环中购物车产品并检查具有名为“费用”的元字段的设置值的产品,并在该条件下添加您的费用添加代码:
if (get_field( "fee" )) { // get_field() returns false if empty aka not set from admin area
// fee adding code for single product in cart
};
二.或者您可以通过添加和显示 WooCommerce 自定义产品元字段来实现这一点,如此处详述:
https://www.cloudways.com/blog/add-custom-product-fields-woocommerce/
大家好,谢谢大家! 我找到了解决问题的办法。我只是多次复制下面描述的代码,因为我对不同的产品有不同的数量并更改它:
add_action('woocommerce_cart_calculate_fees', 'add_fees_on_ids');
function add_fees_on_ids() {
if (is_admin() && !defined
('DOING_AJAX')) {return;}
foreach( WC()->cart->get_cart() as $item_keys => $item ) {
if( in_array( $item['product_id'],
fee_ids() )) {
WC()->cart->add_fee(__('ADDITIONAL FEE:'), 5);
}
}
}
function fee_ids() {
return array( 2179 );
}
我将 add_fees_on_ids
更改为 add_fees_on_ids_1
,将 fee_ids
更改为 fee_ids_1
和 ADDITIONAL FEE:
到 ADDITIONAL FEE 1:
我知道对于某些人来说它可能看起来不专业,但它是解决我的问题的方法。
有几种方法。例如,您确实可以
不过也不必太复杂,为此安装一个额外的插件太牵强了!
多次添加相同的代码也是一个坏主意,因为那样您将多次浏览购物车。这不仅会减慢您的网站速度,而且最终会导致错误。
在我看来,添加一个数组,您不仅可以确定产品 ID,还可以根据数组键立即确定额外费用,这是最简单有效的方法。
所以你得到:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Add in the following way: Additional fee => Product ID
$settings = array(
10 => 1234,
20 => 5678,
5 => 30,
2 => 815,
);
// Initialize
$additional_fee = 0;
// Loop through cart contents
foreach ( $cart->get_cart_contents() as $cart_item ) {
// Get product id
$product_id = $cart_item['product_id'];
// In array, get the key as well
if ( false !== $key = array_search( $product_id, $settings ) ) {
$additional_fee += $key;
}
}
// If greater than 0, so a matching product ID was found in the cart
if ( $additional_fee > 0 ) {
// Add additional fee (total)
$cart->add_fee( __( 'Additional fee', 'woocommerce' ), $additional_fee, false );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
可选:
要单独显示每个费用的加法,让客户知道哪个费用是指哪个产品,可以使用多维数组。
将必要的信息添加到设置数组,其他一切都会自动发生。
所以你得到:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Settings
$settings = array(
array(
'product_id' => 30,
'amount' => 5,
'name' => __( 'Additional service fee', 'woocommerce' ),
),
array(
'product_id' => 813,
'amount' => 10,
'name' => __( 'Packing fee', 'woocommerce' ),
),
array(
'product_id' => 815,
'amount' => 15,
'name' => __( 'Another fee', 'woocommerce' ),
),
);
// Loop through cart contents
foreach ( $cart->get_cart_contents() as $cart_item ) {
// Get product id
$product_id = $cart_item['product_id'];
// Loop trough settings array
foreach ( $settings as $setting ) {
// Search for the product ID
if ( $setting['product_id'] == $product_id ) {
// Add fee
$cart->add_fee( $setting['name'], $setting['amount'], false );
}
}
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
相关: