在自定义函数中从 WooCommerce 动态获取优惠券代码

参考“仅当在 Woocommerce 中应用优惠券时才允许购买特定产品”对我之前的一个问题的回答代码,优惠券代码在函数中硬编码,需要与 Woocommerce 中现有的优惠券代码匹配。

但我想从 Woocommerce 动态选择优惠券。

如何从woocommerce动态获取优惠券?


眼眸繁星
浏览 234回答 3
3回答

当年话下

以下代码扩展了我之前的答案,并将在 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' );    }}
打开App,查看更多内容
随时随地看视频慕课网APP