结帐和订单摘要中显示ACF值

问题描述 投票:0回答:1

我需要你的帮助。我写了以下代码

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;
}
php wordpress woocommerce advanced-custom-fields hook-woocommerce
1个回答
0
投票

您不需要 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 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.