繁体   English   中英

只有在Woocommerce结帐时未隐藏订单备注字段时才需要

[英]Make Order notes field required only when it is not hidden in Woocommerce checkout

在Woocommerce结帐页面中,当选中或取消选中“发送到不同地址”复选框时,我已设法显示或隐藏“订单备注”字段,使用根据Woocommerce结帐中的复选框显示隐藏订单备注字段答案代码我的一个问题。

我希望“订单备注”字段只有在可见时才需要。
当可见(未隐藏)并启用验证时,如何将此“订单备注”字段设为必填项

欢迎任何帮助。

以下代码仅在未隐藏时才需要“订单备注”字段,并在此情况下启用字段验证。

注意 (强制性) :“订单备注”字段必须是可选的 (就像在默认的Woocommerce中一样),否则代码将无法正常工作。

完整的代码:

// Remove "(optional)" label on "Order notes" field
add_filter( 'woocommerce_form_field' , 'remove_order_comments_optional_fields_label', 10, 4 );
function remove_order_comments_optional_fields_label( $field, $key, $args, $value ) {
    // Only on checkout page for Order notes field
    if( 'order_comments' === $key && is_checkout() ) {
        $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
        $field = str_replace( $optional, '', $field );
    }
    return $field;
}

// The jQuery script that show hide "Order notes" field
add_action( 'woocommerce_after_order_notes', 'custom_checkout_scripts_js_script', 10, 1 );
function custom_checkout_scripts_js_script( $checkout ) {
    $required = esc_html__( 'required', 'woocommerce' );

    ?>
    <script type="text/javascript">
    (function($){
        var required     = '<abbr class="required" title="<?php echo $required; ?>">*</abbr>',
            notesField   = '#order_comments_field',
            shipCheckbox = '#ship-to-different-address-checkbox';

        function actionRequire( actionToDo='yes', selector='' ){
            if ( actionToDo == 'yes' ) {
                $(selector).addClass("validate-required");
                $(selector+' label').append(required);
            } else {
                $(selector).removeClass("validate-required");
                $(selector+' label > .required').remove();
            }
            $(selector).removeClass("woocommerce-validated");
            $(selector).removeClass("woocommerce-invalid woocommerce-invalid-required-field");
        }

        // On load and on form change
        $('form.checkout').on( 'change', shipCheckbox, function(){
            if( $(this).prop('checked') === true ) {
                $(notesField).hide(); // Show
                actionRequire( 'no' ,notesField );
            } else {
                $(notesField).show(); // Hide
                actionRequire( 'yes' ,notesField );
            }
        });
    })(jQuery);
    </script>
    <?php
}

// "Order notes" field validation
add_action('woocommerce_checkout_process', 'order_comments_field_validation');
function order_comments_field_validation() {
    if ( isset($_POST['order_comments']) && empty($_POST['ship_to_different_address']) )
        wc_add_notice( __( 'Please fill in "Order notes" required field.' ), 'error' );
}

代码在您的活动子主题(或活动主题)的function.php文件中。 经过测试和工作。


类似: 根据运输国家/地区选择Woocommerce结帐电话字段
相关: 根据Woocommerce结帐中的复选框显示隐藏订单备注字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM