WooCommerce定制产品验证

时间:2013-10-23 20:26:49

标签: php validation woocommerce wordpress

我试图在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,以便它可以返回到标准操作。我做的每件事似乎都会回到单个产品页面并删除我的重力表单字段。

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分: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;

我已将此提交为错误,因此希望在将来的更新中解决此问题。

相关问题