我需要你的帮助。我写了以下代码
add_action( 'woocommerce_single_product_summary', 'show_vin', 30 );
function show_vin() {
global $product;
$arithmos_plaisiou = get_field( "arithmos_plaisiou" );
if ( $product && has_term( 'antallaktika', 'product_cat', $product->get_id() ) ) {
?>
<div class="show_ask_vin">
<label id="vin_label" for="vin_input">*Αριθμός πλαισίου οχήματος:</label>
<input type="text" id="vin_input" name="vin_input" value="<?php echo esc_attr($arithmos_plaisiou); ?>">
</div>
<script>
jQuery(function($) {
// Attach a submit event handler to the add-to-cart form
$('form.cart').submit(function() {
// Get the value of the VIN input field and trim any leading or trailing whitespace
var vinValue = $('#vin_input').val().trim();
// Check if the VIN input length is exactly 17 characters
if (vinValue.length !== 17) {
// If it's not 17 characters, prevent the form submission and display an error message
alert('Παρακαλώ εισάγετε τον αριθμό πλαισίου 17 ψηφίων! ');
return false; // Prevent form submission
}
// Add the VIN value to the cart item data
$('input[name="vin_input"]').val(vinValue);
// If the VIN input length is 17 characters, allow the form submission
return true;
});
});
</script>
<?php
}}
在单个产品页面添加ACF,当产品符合某个类别时询问汽车的VIN号。我想将 ACF 字段的值传递给 woocommerce 订单摘要。 我尝试了一些找到的解决方案,但没有一个有效。
尝试了以下片段
// Save VIN value to cart item data
add_filter('woocommerce_add_cart_item_data', 'save_vin_to_cart', 10, 2);
function save_vin_to_cart($cart_item_data, $product_id) {
if (isset($_POST['vin_input'])) {
$cart_item_data['vin_input'] = sanitize_text_field($_POST['vin_input']);
}
return $cart_item_data;
}
// Display VIN value in cart
add_filter('woocommerce_get_item_data', 'display_vin_in_cart', 10, 2);
function display_vin_in_cart($item_data, $cart_item) {
if (!empty($cart_item['vin_input'])) {
$item_data[] = array(
'key' => 'VIN',
'value' => $cart_item['vin_input']
);
}
return $item_data;
}
您不需要 JavaScript,而是使用 WooCommerce 产品字段验证...现在您的字段需要位于添加到购物车表单内,允许验证并允许将此输入的字段值添加为自定义购物车项目数据:
// Display the field
add_action( 'woocommerce_before_add_to_cart_button', 'show_vin', 30 );
function show_vin() {
global $product;
$field_value = get_field('arithmos_plaisiou', $product->get_id());
if ( !empty($field_value) && has_term( 'antallaktika', 'product_cat', $product->get_id() ) ) {
echo '<div class="show_ask_vin">
<label id="vin_label" for="vin_input">'.__('*Αριθμός πλαισίου οχήματος:').'</label>
<input type="text" id="vin_input" name="vin_input" value="'.esc_attr($field_value).'">
</div>';
}
}
// Validate the field
add_action( 'woocommerce_add_to_cart_validation', 'validate_vin' );
function validate_vin( $passed ) {
if ( isset($_POST['vin_input']) ) {
if ( empty($_POST['vin_input']) ) {
wc_add_notice( __('Το πεδίο "Αριθμός πλαισίου οχήματος" είναι υποχρεωτικό.', 'woocommerce'), "error" );
$passed = false;
} elseif ( strlen( sanitize_text_field($_POST['vin_input']) ) !== 17 ) {
wc_add_notice( __('Παρακαλώ εισάγετε τον αριθμό πλαισίου 17 ψηφίων!', 'woocommerce'), "error" );
$passed = false;
}
}
return $passed;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。