در ووکامرس یک سایت وردپرسی می خواهیم وقتی کوپن را در صفحه پرداخت اعمال کردیم به طور خودکار برای مالیات یا قیمت های محصول اعمال نشود. به عبارت دیگر :
میخواهیم کد کوپن برای کل سبد خرید اعمال شود.
کد زیر را در قسمت functions.php وارد کرده و پرونده را ذخیره کنید.
روش اول
البته که تنظیماتی هستند در قسمت WooCommerce >> تنظیمات >> مالیات که می توانید آنها را تغییر دهید اما با کد یکسری مسائل بهتر مدیریت می شوند.(چک باکس “خیر، قیمت ها را بدون مالیات وارد خواهم کرد” را انتخاب کنید.)
همچنین، برای کسب اطلاعات بیشتر مالیات ووکامرس را بررسی کنید.
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
function apply_matched_coupons(){ $coupon_code = 'freeweek'; if ( WC()->cart->has_discount( $coupon_code ) ) return; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { // this is your product ID $autocoupon = array( 40 ); if( in_array( $cart_item['product_id'], $autocoupon ) ) { WC()->cart->add_discount( $coupon_code ); wc_print_notices(); } } }
روش دوم
می توانید کد کوپن را به صورت خودکار در سبد خرید اضافه کنید و در هر دو صفحه پرداخت کنید. فرض کنید مشتری محصولی را به سبد خرید اضافه کند اما صفحه سبد خرید را باز نمی کند و مستقیماً صفحه فروشگاه را به صفحه تسویه حساب منتقل می کند و سپس با یک کوپن درخواست خودکار برای صفحه سبد خرید صادر می کند.
بنابراین باید هر دو قلاب (صفحه سبد خرید و صفحه پرداخت) را فراخوانی کنید.برای اینکار از قطعه کد زیر استفاده کنید:
// Add coupon when user views cart page. add_action('woocommerce_before_cart_table', 'woo_apply_matched_coupons'); // Add coupon when user views checkout page. add_action('woocommerce_before_checkout_form', 'woo_apply_matched_coupons'); function woo_apply_matched_coupons() { global $woocommerce; $coupon_code = 'ABCD125467'; // your coupon code // If coupon not Applied!. if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) { wc_print_notices(); } // Manually recalculate totals. If you do not do this, a refresh is required before the user will see updated totals when the discount is removed. $woocommerce->cart->calculate_totals(); }