web-dev-qa-db-ja.com

WooCommerceカスタム商品検証

私はWordPressで WooCommerce Gravity Forms _を使用し、 )と統合する会員制を構築しようとしています。 SalesForce

誰かが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に検証(または無効化)を正しく渡して標準操作に戻すことができるようにするにはどうすればよいですか。私がすることはすべて単一の製品ページに戻り、私の重力フォームフィールドを削除するようです。

どんな考えでも感謝されるでしょう。

2
Eric K

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

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;

私はこれをバグとして提出しましたので、うまくいけばそれは将来のアップデートで解決されるでしょう。

1
Eric K