我们有一个WooCommerce多步结帐。一个结账步骤是保险,但此保险仅适用于租赁类别。
如果租车产品在购物车中,则只显示保险步骤。在Checking if the WooCommerce Cart Contains a Product Category上发现了一篇很棒的文章,但是当我们将add_action片段加载到结帐步骤时,代码没有提供所需的结果:
以下是我们对自定义模板的add_action调用(
add_action('woocommerce_multistep_checkout_after_shipping', 'add_my_insurance_step_with_new_field');
function add_my_insurance_step_with_new_field( $checkout ) {
wc_get_template( 'checkout/insurance.php', array( 'checkout' => $checkout ) );
}
这里放置在SkyVerge的代码中:
// set our flag to be false until we find a product in that category
$cat_check = false;
// check each cart item for our category
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
// replace 'membership' with your category's slug
if ( has_term( 'rentals', 'product_cat', $product->id ) ) {
$cat_check = true;
// break because we only need one "true" to matter here
break;
}
}
// if a product in the cart is in our category, do something
if ( $cat_check ) {
// we have the category, do what we want
add_action('woocommerce_multistep_checkout_after_shipping', 'add_my_insurance_step_with_new_field');
function add_my_insurance_step_with_new_field( $checkout ) {
wc_get_template( 'checkout/insurance.php', array( 'checkout' => $checkout ) );
}
}
非常接近!不确定会出现什么问题。
感谢您的帮助, -L
答案 0 :(得分:0)
这就解决了问题。将$cat_check
设置为false
,浏览购物车中的每件商品,检查购物车中是否有我们的类别slug(rentals
),如果为true,我们会突破并运行下一个{{ 1}}陈述。
获取模板文件并在结帐订单信息(if
)之前加载。
woocommerce_multistep_checkout_before_order_info
希望能帮助别人。 **或者如果我的代码有任何问题,请告诉我。谢谢!