-
当年话下
以下代码扩展了我之前的答案,并将在 WooCommerce > 优惠券部分添加一个复选框,使任何优惠券代码对于特定定义的项目都是“强制性的”:因此,这样您就不必在函数中定义任何优惠券代码。整个代码:// Add a custom checkbox to Admin coupon settings pagesadd_action( 'woocommerce_coupon_options', 'add_coupon_option_checkbox', 10 );function add_coupon_option_checkbox() { woocommerce_wp_checkbox( array( 'id' => 'items_mandatory', 'label' => __( 'Force specific items', 'woocommerce' ), 'description' => __( 'Make this coupon mandatory for specific items.', 'woocommerce' ), 'desc_tip' => false, ) );}// Save the custom checkbox value from Admin coupon settings pagesadd_action( 'woocommerce_coupon_options_save', 'save_coupon_option_checkbox', 10, 2 );function save_coupon_option_checkbox( $post_id, $coupon ) { update_post_meta( $post_id, 'items_mandatory', isset( $_POST['items_mandatory'] ) ? 'yes' : 'no' );}add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_for_specific_items' );function mandatory_coupon_for_specific_items() { $targeted_ids = array(37); // The targeted product ids (in this array) $applied_coupons = WC()->cart->get_applied_coupons(); $coupon_applied = false; if( sizeof($applied_coupons) > 0 ) { // Loop through applied coupons foreach( $applied_coupons as $coupon_code ) { $coupon = new WC_Coupon( $coupon_code ); if( $coupon->get_meta('items_mandatory') === 'yes' ) { $coupon_applied = true; break; } } } // Loop through cart items foreach(WC()->cart->get_cart() as $cart_item ) { // Check cart item for defined product Ids and applied coupon if( in_array( $cart_item['product_id'], $targeted_ids ) && ! $coupon_applied ) { wc_clear_notices(); // Clear all other notices // Avoid checkout displaying an error notice wc_add_notice( sprintf( 'The product"%s" requires a coupon for checkout.', $cart_item['data']->get_name() ), 'error' ); break; // stop the loop } }}代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。在结帐时:
-
天涯尽头无女友
试试这个,更改被评论:add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_for_specific_items' );function mandatory_coupon_for_specific_items() { // The targeted product ids (in this array) $targeted_ids = array(37); // Get applied $coupon_names $cart_applied_coupons = WC()->cart->get_applied_coupons() // Set the variable $coupon_applied to false $coupon_applied = false; // Create an array to save all coupon names $coupon_names = array(); // Get the available coupons $args = array( 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'asc', 'post_type' => 'shop_coupon', 'post_status' => 'publish', ); $all_coupons = get_posts( $args ); if( !empty($all_coupons) ){ // Loop through the available coupons foreach ( $all_coupons as $coupon ) { // Get the name for each coupon and add to the previously created array $coupon_name = $coupon->post_title; array_push( $coupon_names, $coupon_name ); } // If one on the coupons is applied change the value of $coupon_applied to true foreach($coupon_names as $coupon_code){ if( in_array( strtolower($coupon_code), $cart_applied_coupons) ){ $coupon_applied = true; break; } } } // Loop through cart items foreach(WC()->cart->get_cart() as $cart_item ) { // Check cart item for defined product Ids and applied coupon if( in_array( $cart_item['product_id'], $targeted_ids ) && ! $coupon_applied ) { wc_clear_notices(); // Clear all other notices // Avoid checkout displaying an error notice wc_add_notice( sprintf( 'The product"%s" requires a coupon for checkout.', $cart_item['data']->get_name() ), 'error' ); break; // stop the loop } }}
-
千巷猫影
以为我会分享我的类别版本。使用了此处发布的解决方案和此解决方案的组合。// Add a custom checkbox to Admin coupon settings pagesadd_action( 'woocommerce_coupon_options', 'add_coupon_option_checkbox', 10 );function add_coupon_option_checkbox() { woocommerce_wp_checkbox( array( 'id' => 'items_mandatory', 'label' => __( 'Force specific items', 'woocommerce' ), 'description' => __( 'Make this coupon mandatory for specific items.', 'woocommerce' ), 'desc_tip' => false, ) );}// Save the custom checkbox value from Admin coupon settings pagesadd_action( 'woocommerce_coupon_options_save', 'save_coupon_option_checkbox', 10, 2 );function save_coupon_option_checkbox( $post_id, $coupon ) { update_post_meta( $post_id, 'items_mandatory', isset( $_POST['items_mandatory'] ) ? 'yes' : 'no' );}// Force Coupon codes for Woocommerceadd_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );function mandatory_coupon_code() { // Set your product categories in the array (can be term IDs, slugs or names) $product_categories = array( '58'); $applied_coupons = WC()->cart->get_applied_coupons(); $found = false; if( sizeof($applied_coupons) > 0 ) { // Loop through applied coupons foreach( $applied_coupons as $coupon_code ) { $coupon = new WC_Coupon( $coupon_code ); if( $coupon->get_meta('items_mandatory') === 'yes' ) { $coupon_applied = true; break; } } } // Loop through cart items to check for the product categories foreach ( WC()->cart->get_cart() as $cart_item ){ if( has_term( $product_categories, 'product_cat', $cart_item['product_id'] ) ){ $found = true; // cart item from the product category is found break; // We can stop the loop } } // If not found we exit if( ! $found ) return; // exit // Coupon not applied and product category found if( ! $coupon_applied) { // Display an error notice preventing checkout $message = __( 'The product "%s" requires a coupon for checkout.' ); wc_add_notice( sprintf($message, $cart_item['data']->get_name() ), 'error' ); }}