我对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 );
视图: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 );
我会说您应该使用产品附加组件,但是它似乎没有日期选择器。无论如何,我会尝试如下修改您的验证功能:
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
变量的当前状态。我不能保证它会起作用,因为我不会设置测试它所需的其余代码,但这与我已经做过很多次相似。
另一方面,除非您打算将此验证应用于商店中的每个产品,否则需要使用一些附加的条件逻辑来限制此功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句