2013-10-23 138 views
3

我試圖建立在WordPress的會員系統,利用WooCommerce重力窗體SalesForce公司集成。WooCommerce定製產品驗證

有人可以給我一些指導如何正確使用woocommerce_add_to_cart_validation過濾器嗎?我不知道如何正確使用這個鉤子。

無論我做什麼,如果我嘗試執行任何自定義驗證,該項目不會添加到購物車。下面是我的代碼:

add_filter('woocommerce_add_to_cart_validation', 'validate_active_subscription', 10, 10); 

function validate_active_subscription($valid, $product_id, $quantity, $variation_id, $variations) { 
    global $woocommerce; 
    $cart_item_data = (array) apply_filters('woocommerce_add_cart_item_data', $cart_item_data, $product_id, $variation_id); 
    $item_data = $cart_item_data["_gravity_form_lead"]; 

    //CAPTURE THE ID OF THE MEMBERSHIP CATEGORY 
    $idObj = get_term_by('slug','membership','product_cat'); 
    $membership_id = $idObj->term_id; 

    $membership_purchased = false; 
    $terms = woocommerce_get_product_terms($product_id, 'product_cat'); 
    foreach ($terms as $term) { 
    if($term->term_id == $membership_id){ 
     $membership_purchased = true; 
    } 
    } 
    if($membership_purchased){ 
    //LET'S CHECK THAT, IF THIS EMAIL EXISTS WITHIN SALESFORCE, IT IS ASSOCATED WITH THE SAME INDIVIDUAL 
    try { 
     $mySforceConnection = SalesForce_Access::Connection(); 
     $sf_contact = SalesForce_Access::Search_Contacts_Via_Email($mySforceConnection, $item_data[6]); 
     if($sf_contact->FirstName == $item_data[3] && $sf_contact->LastName == $item_data[4]){ 
     //$valid = true; 
     }else{ 
     //$woocommerce->add_error("The email address you supplied already exists within our system. Please supply a different email"); 
     //$valid = false; 
     } 
    } 
    catch (Exception $e) 
    { 
     //$woocommerce->add_error($e->faultstring); 
     //$valid = false; 
    } 
    } 
} 

用戶添加會員項目到車前,我要檢查的電子郵件地址,姓氏和名字,以確認信息正確匹配的現有記錄(例如,如果電子郵件存在,提供的名字和姓氏也應該匹配)。

但是,如何正確地將驗證(或失效)傳遞迴WooCommerce,以便它可以返回到標準操作。我所做的每件事似乎都會回到單個產品頁面並刪除我的重力表單字段。

任何想法將不勝感激。

+0

我也打開完全不同的方法來實現預期的結果。任何想法都歡迎! –

回答

0

我能夠發現問題。

看來,重力窗體附加有其自己的驗證不檢查來執行它自己的邏輯驗證之前的狀態。因此,以前的任何驗證失敗都不會觸發Gravity Forms驗證,因此允許Gravity Forms驗證並從產品頁面中刪除它們。

對此的解決辦法是添加以下代碼行的gravityforms - 產品 - addons.php 414文件:

// If valid is passed in as false, do not complete validation 
if(!$valid) 
    return false; 

我已經提交了這個bug,所以希望它將在未來的更新中得到解決。