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

Eya*_*tan 2 php wordpress woocommerce

大家好,我对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 );    
Run Code Online (Sandbox Code Playgroud)

视图:http : //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 );
Run Code Online (Sandbox Code Playgroud)

hel*_*ing 5

我会说您应该使用产品附加组件,但是它似乎没有日期选择器。无论如何,我会尝试如下修改您的验证功能:

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 );  
Run Code Online (Sandbox Code Playgroud)

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

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

  • 应该是`add_filter`而不是`add_action` (3认同)