3

WooCommerceGravity Formsを利用し、 SalesForceと統合するWordPress のメンバーシップ システムを構築しようとしています。

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 に適切に戻すにはどうすればよいですか。私がすることはすべて、単一の製品ページにループバックし、重力フォーム フィールドを削除するようです。

任意の考えをいただければ幸いです。

4

1 に答える 1

0

問題を発見することができました。

Gravity Formsアドオンには、独自のロジックを実行する前に検証のステータスをチェックしない独自の検証があるようです。したがって、失敗した以前の検証は Gravity Forms 検証をトリップしないため、Gravity Forms を検証して製品ページから削除することができます。

これを解決するには、 gravityforms-product-addons.phpファイルの 414 行目に次のコードを追加します。

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

これはバグとして提出したので、将来のアップデートで解決されることを願っています。

于 2013-10-24T17:49:26.787 に答える