2017-10-04 55 views
1

我正在使用woocommerce和wordpress開發項目,我需要在其中實施特定功能。該項目要求某些產品標記爲「租賃」。如果用戶添加了「租賃」類別的產品,用戶將被重定向到一個頁面,其中將填寫一個將自動包含產品sku的聯繫表單。該產品不能添加到購物車中。WooCommerce重定向如果用戶將產品從某個類別添加到購物車

我試過使用過濾器「woocommerce_add_to_cart_redirect」。我檢查了產品是否屬於某個類別,如果是,它將被重定向到聯繫頁面。問題在於該產品已添加到購物車中。

add_filter('woocommerce_add_to_cart_redirect', 'rv_redirect_on_add_to_cart'); 
function rv_redirect_on_add_to_cart() { 
//Get product ID 
if (isset($_POST['add-to-cart'])) { 

    $product_id = (int) apply_filters('woocommerce_add_to_cart_product_id', $_POST['add-to-cart']); 

    //Check if product ID is in the proper taxonomy and return the URL to the redirect product 
    if (has_term('rental', 'product_cat', $product_id)){ 
     $product = wc_get_product($product_id); 
     $_POST['rental-product-sku'] = $product->get_sku(); 
     return get_permalink(get_page_by_path('rent-a-book')); 
    } 
} 
} 

於是,我就用自定義驗證「woocommerce_add_to_cart_validation」來檢查產品所屬的類別,如果是這樣,則返回false。

add_action('woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2); 
function add_the_date_validation($passed, $product_id) { 
    $terms = wp_get_post_terms($product_id, 'product_cat'); 

    foreach ($terms as $term) $categories[] = $term->slug; 
    if(count($categories) == 0){ 
     return true; 
    } 
    if (in_array('rental', $categories)) { 
     return false; 
    } else { 
     return true; 
    } 
    return true; 
} 

問題是,如果驗證返回false,未加載重定向過濾器和用戶沒有重定向到接觸頁面。我一直在研究一段時間,而且我的嘗試沒有成功。有人可以幫我弄這個嗎?

謝謝

回答

1

爲什麼不做這樣的事情?

add_action('woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2); 
function add_the_date_validation($passed, $product_id) { 

    if (has_term('rental', 'product_cat', $product_id)){ 
     // $product = wc_get_product($product_id); 
     // $_POST['rental-product-sku'] = $product->get_sku(); 
     wp_safe_redirect(get_permalink(get_page_by_path('rent-a-book'))); 
     exit(); 
    } 
    return $passed; 
} 
+0

謝謝你的回覆,但它沒有奏效。我認爲,如果驗證返回false,則重定向根本不起作用,即使是在相同的函數中。 –

+0

我不知道你是否像我所做的那樣做...如果你提供的鏈接是正確的,'wp_safe_redirect'(在函數內部找到)會重定向你的頁面...上面的函數將跳過驗證過程。 – Reigel

+0

我做了一些故障排除。我不認爲wp_safe_redirect正在工作。 –

相關問題