會有這個客制,主要是因為我要匯入進銷存系統,預設的coupon的值會因為平均的關係造成小數點,所以才改成此法,用這招有一個重點,折扣改成0,輸入的代碼輸入後系統會自行加入該商品
// 在主题的functions.php文件中添加以下代码 add_action('woocommerce_before_calculate_totals', 'custom_apply_coupon', 10); function custom_apply_coupon($cart) { if (is_admin() && !defined('DOING_AJAX')) { return; } // 定义折扣码与产品ID的映射 $coupon_product_mapping = array( 'cy50' => 44738, 'hg100' => 40445, 'vip100'=> 47551, ); // 检查购物车中是否包含指定产品 $product_in_cart = false; foreach ($cart->get_cart() as $cart_item_key => $cart_item) { foreach ($coupon_product_mapping as $coupon_code => $product_id) { if ($cart_item['product_id'] === $product_id) { $product_in_cart = true; break 2; } } } // 获取当前应用的折扣码 $applied_coupons = $cart->get_applied_coupons(); foreach ($coupon_product_mapping as $coupon_code => $product_id) { // 检查应用的折扣码是否匹配 if (in_array($coupon_code, $applied_coupons, true)) { // 如果折扣码有效,检查购物车中是否包含产品,如果不包含,则添加 if (!$product_in_cart) { $cart->add_to_cart($product_id); break; } } else { // 如果折扣码失效或不存在,检查购物车中是否包含产品,如果包含,则移除 if ($product_in_cart) { foreach ($cart->get_cart() as $cart_item_key => $cart_item) { if ($cart_item['product_id'] === $product_id) { $cart->remove_cart_item($cart_item_key); break; } } } } } }
由於贈品我是用比較笨的方式,用0元商品,因此還要搭配下面的functoin使用
禁止贈品被搜尋
function exclude_gift_products_from_search1111($query) { if (!is_admin() && $query->is_search) { $tax_query = array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'gift', 'operator' => 'NOT IN', ) ); $query->set('tax_query', $tax_query); } return $query; } add_filter('pre_get_posts', 'exclude_gift_products_from_search1111'); /* // 添加一个过滤器,用于检查产品类别并禁止加入购物车 function prevent_add_to_cart_for_gift_category($passed, $product_id, $quantity, $variation_id = '', $variations = array(), $cart_item_data = array()) { // 获取产品的类别(分类) $product = wc_get_product($product_id); if ($product) { $categories = $product->get_category_ids(); foreach ($categories as $category_id) { // 获取类别(分类)的 slug $category = get_term_by('id', $category_id, 'product_cat'); if ($category && $category->slug === 'gift') { // 如果产品属于 "gift" 类别,则阻止加入购物车 wc_add_notice(__('抱歉!此商品為贈品不可允許自行加入購物車.', 'your-text-domain'), 'error'); return false; } } } return $passed; } add_filter('woocommerce_add_to_cart_validation', 'prevent_add_to_cart_for_gift_category', 10, 6); */
若產品名稱有'贈品'均返回首頁
function check_product_name_and_redirect() { if (is_product()) { global $post; $product_name = $post->post_title; if (strpos($product_name, '贈品') !== false) { wp_redirect(home_url()); exit(); } } } add_action('template_redirect', 'check_product_name_and_redirect');
產品有贈品兩個字無法被購買
function restrict_specific_products_from_cart2($passed, $product_id, $quantity) { $product = wc_get_product($product_id); if (strpos($product->get_name(), '贈品') !== false) { $passed = false; $message = "本商品無法加入購物車。"; wc_add_notice($message, 'error'); } return $passed; } add_filter('woocommerce_add_to_cart_validation', 'restrict_specific_products_from_cart2', 10, 3);