如果添加了另一个产品,则不允许从 WooCommerce 购物车中删除具有特定 ID 的产品
Disallow to remove a product with a specific ID from WooCommerce cart if another product is added
我必须对我的购物车/结帐页面实施以下逻辑:
如果带有 ID="100"
的产品在购物车中,如果还添加了带有 ID="101"
的产品,我需要禁止将其从购物车中移除。
简而言之,仅当未添加具有特定 ID 的产品时,才能删除产品。
之前我使用以下解决方案来禁止仅针对特定产品 ID 删除产品。但是这段代码不适用于变量产品,我不知道如何在其中实现我的逻辑。
add_filter('woocommerce_cart_item_remove_link', 'customized_cart_item_remove_link', 20, 2 );
function customized_cart_item_remove_link( $button_link, $cart_item_key ){
$targeted_products_ids = array( 98,99,100 );
$cart_item = WC()->cart->get_cart()[$cart_item_key];
if( in_array($cart_item['data']->get_id(), $targeted_products_ids) )
$button_link = '';
return $button_link;
}
提前感谢您的帮助。
如果 product_id_1
在购物车中,此答案允许您如果还添加了 product_id_2
,则无法将其从购物车中移除。
这可以通过 $settings
数组应用于多个产品,因此如果相应的产品 ID 在购物车中,则无法删除某个产品。
为清楚起见,这基于产品 ID(简单)或父 ID(可变)产品。如果您想将其应用于可变产品的变体,则不必使用 get_parent_id()
.
所以你得到:
function filter_woocommerce_cart_item_remove_link( $link, $cart_item_key ) {
// Settings (multiple settings arrays can be added/removed if desired)
$settings = array(
array(
'product_id_1' => 100,
'product_id_2' => 101,
),
array(
'product_id_1' => 30,
'product_id_2' => 813,
),
array(
'product_id_1' => 53,
'product_id_2' => 817,
),
);
// Get cart
$cart = WC()->cart;
// If cart
if ( $cart ) {
// Get cart item
$cart_item = $cart->get_cart()[$cart_item_key];
// Get parent/real ID
$product_id = $cart_item['data']->get_parent_id() != 0 ? $cart_item['data']->get_parent_id() : $cart_item['data']->get_id();
// Loop trough settings array
foreach ( $settings as $key => $setting ) {
// Compare, get the correct setting array
if ( $product_id == $settings[$key]['product_id_1'] ) {
// Cart id of the other product
$product_cart_id = $cart->generate_cart_id( $settings[$key]['product_id_2'] );
// Find other product in cart
$in_cart = $cart->find_product_in_cart( $product_cart_id );
// When true
if ( $in_cart ) {
// Hide remove button
$link = '';
// Break loop
break;
}
}
}
}
return $link;
}
add_filter( 'woocommerce_cart_item_remove_link', 'filter_woocommerce_cart_item_remove_link', 10, 2 );
我必须对我的购物车/结帐页面实施以下逻辑:
如果带有 ID="100"
的产品在购物车中,如果还添加了带有 ID="101"
的产品,我需要禁止将其从购物车中移除。
简而言之,仅当未添加具有特定 ID 的产品时,才能删除产品。
之前我使用以下解决方案来禁止仅针对特定产品 ID 删除产品。但是这段代码不适用于变量产品,我不知道如何在其中实现我的逻辑。
add_filter('woocommerce_cart_item_remove_link', 'customized_cart_item_remove_link', 20, 2 );
function customized_cart_item_remove_link( $button_link, $cart_item_key ){
$targeted_products_ids = array( 98,99,100 );
$cart_item = WC()->cart->get_cart()[$cart_item_key];
if( in_array($cart_item['data']->get_id(), $targeted_products_ids) )
$button_link = '';
return $button_link;
}
提前感谢您的帮助。
如果 product_id_1
在购物车中,此答案允许您如果还添加了 product_id_2
,则无法将其从购物车中移除。
这可以通过 $settings
数组应用于多个产品,因此如果相应的产品 ID 在购物车中,则无法删除某个产品。
为清楚起见,这基于产品 ID(简单)或父 ID(可变)产品。如果您想将其应用于可变产品的变体,则不必使用 get_parent_id()
.
所以你得到:
function filter_woocommerce_cart_item_remove_link( $link, $cart_item_key ) {
// Settings (multiple settings arrays can be added/removed if desired)
$settings = array(
array(
'product_id_1' => 100,
'product_id_2' => 101,
),
array(
'product_id_1' => 30,
'product_id_2' => 813,
),
array(
'product_id_1' => 53,
'product_id_2' => 817,
),
);
// Get cart
$cart = WC()->cart;
// If cart
if ( $cart ) {
// Get cart item
$cart_item = $cart->get_cart()[$cart_item_key];
// Get parent/real ID
$product_id = $cart_item['data']->get_parent_id() != 0 ? $cart_item['data']->get_parent_id() : $cart_item['data']->get_id();
// Loop trough settings array
foreach ( $settings as $key => $setting ) {
// Compare, get the correct setting array
if ( $product_id == $settings[$key]['product_id_1'] ) {
// Cart id of the other product
$product_cart_id = $cart->generate_cart_id( $settings[$key]['product_id_2'] );
// Find other product in cart
$in_cart = $cart->find_product_in_cart( $product_cart_id );
// When true
if ( $in_cart ) {
// Hide remove button
$link = '';
// Break loop
break;
}
}
}
}
return $link;
}
add_filter( 'woocommerce_cart_item_remove_link', 'filter_woocommerce_cart_item_remove_link', 10, 2 );