WooCommerce 添加到购物车验证:阻止添加到购物车

2023-12-29

我遇到了 woocommerce 的问题,我花了几天时间试图解决。

我正在为一个人创建一个网站,他希望我在产品页面上添加自定义输入,我自己无法做到这一点,所以我在网上使用了自由职业者。

在产品页面上,我有一个添加到购物车按钮、数量输入和日期输入。

“日期输入”是自由职业者所做的。

问题是,当 $_REQUEST['thedate'] 为空时,自定义错误会弹出,但产品仍然添加到购物车中。

代码:(functions.php)

function add_the_date_validation() { 
  if ( empty( $_REQUEST['thedate'] )) {
    wc_add_notice( __( 'Please enter a date.', 'woocommerce' ), 'error' );
    return false;
  }
  return true;
}
add_action( 'woocommerce_add_to_cart_validation', 'add_the_date_validation', 10, 5 );    

风景:https://i.stack.imgur.com/a75P6.png https://i.stack.imgur.com/a75P6.png

  • 如何防止产品自行添加到购物车?

自由职业者所做的其他代码:

function save_add_the_date_field( $cart_item_key, $product_id = null, $quantity= null, $variation_id= null, $variation= null ) {
  if( isset( $_REQUEST['thedate'] ) ) {
    WC()->session->set( $cart_item_key.'_the_date', $_REQUEST['thedate'] );
  }
}

add_action( 'woocommerce_add_to_cart', 'save_add_the_date_field', 1, 5 );

function render_meta_on_checkout_order_review_item( $quantity = null, $cart_item = null, $cart_item_key = null ) {
  if( $cart_item_key && WC()->session->__isset( $cart_item_key.'_the_date' ) ) {
    echo $quantity. '<dl class="">
                      <dt class="">Date: </dt>
                      <dd class=""><p>'. WC()->session->get( $cart_item_key.'_the_date') .'</p></dd>
                    </dl>';
  }
}

add_filter( 'woocommerce_checkout_cart_item_quantity', 'render_meta_on_checkout_order_review_item', 1, 3 );

function the_date_order_meta_handler( $item_id, $values, $cart_item_key ) {
  if( WC()->session->__isset( $cart_item_key.'_the_date' ) ) {
    wc_add_order_item_meta( $item_id, "the_date", WC()->session->get( $cart_item_key.'_the_date') );
  }
}

add_action( 'woocommerce_add_order_item_meta', 'the_date_order_meta_handler', 1, 3 );

function the_date_force_individual_cart_items($cart_item_data, $product_id) {
  $unique_cart_item_key = md5( microtime().rand() );
  $cart_item_data['unique_key'] = $unique_cart_item_key;

  return $cart_item_data;
}

add_filter( 'woocommerce_add_cart_item_data','the_date_force_individual_cart_items', 10, 2 );

我会说你应该使用产品附加组件 http://docs.woothemes.com/document/product-add-ons/但它似乎没有日期选择器。无论如何,我会尝试修改您的验证函数,如下所示:

function add_the_date_validation( $passed ) { 
if ( empty( $_REQUEST['thedate'] )) {
    wc_add_notice( __( 'Please enter a date.', 'woocommerce' ), 'error' );
    $passed = false;
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'add_the_date_validation', 10, 5 );  

而不是返回TRUE你想返回当前的状态$passed多变的。我不能保证这会起作用,因为我不会设置测试它所需的其余代码,但这与我多次所做的类似。

另一方面,除非您打算将此验证应用于商店中的每个产品,否则您需要使用一些额外的条件逻辑来限制此功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WooCommerce 添加到购物车验证:阻止添加到购物车 的相关文章

随机推荐