在Woocommerce网站上,我需要提供不同的条款和条件,具体取决于购物车中的产品类别 . 这部分工作没问题 .
但是,当触发产品特定术语时,我需要将它们作为必填字段 . 这是有效的,但是当指示的类别不在购物车中时它也会阻止结账 .
这是我的代码:
add_action('woocommerce_review_order_before_submit', 'add_pipletz_terms', 9);
function add_pipletz_terms() {
// Show Terms 1
$special_cat = 'insurance'; // HERE set your special category name, slug or ID
$bool = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$item = $cart_item['data'];
if ( has_term( 'insurance', 'product_cat', $item->id ) )
$bool = true;
}
if ( $bool ) {
?>
<p class="form-row terms wc-terms-and-conditions">
<label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
<input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox pipletz-terms" name="pipletz-terms" <?php checked( apply_filters( 'woocommerce_terms_is_checked_default', isset( $_POST['terms-1'] ) ), true ); ?> id="pipletz-terms"> <span><a href="https://businessbloomer.com/woocommerce-display-product-specific-tc-checkout/" target="_blank">I’ve read and accept the Pipletz product terms & conditions</a></span> <span class="required">*</span>
</label>
</p>
<?php
}
}
// If customer does not agree to terms
add_action('woocommerce_checkout_process', 'not_approved_pipletz_terms');
function not_approved_pipletz_terms() {
if ( empty( $_POST['pipletz-terms'] ) ) {
wc_add_notice( __( 'Please agree to the Pipletz product terms & conditions' ), 'error' ); }
}
任何有关如何仅在类别存在时才需要制定条款的帮助将不胜感激 .
1 回答
Updated - 首先,这个代码对于woocommerce版本3有点过时了...所以我添加了WC 3兼容性代码 .
要避免此问题,您还需要在购物车商品中检查第二个功能以获取特殊产品类别(因此您还需要添加foreach循环)...
同样在foreach循环中,一旦找到产品,你就可以打破循环...要完成,在你的代码中,
isset( $_POST['terms-1'] )
应该是 isset( $_POST['pipletz-terms'] ) 来工作......所以兼容的WC3代码应该是:
我已经成功地在WC3上测试了这个代码而没有任何问题,所以它适用于所有情况......