当前位置: 首页 > 知识库问答 >
问题:

仅当订单备注字段未隐藏在电子商务签出中时,才需要该字段

朱祺
2023-03-14

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

我希望“订单注释”字段只有在可见时才是必需的
当此“订单注释”字段可见(而不是隐藏)时,如何使其成为必需字段并为其启用验证?

欢迎任何帮助。

共有1个答案

田成仁
2023-03-14

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

注意(“订单注释”字段必须是可选的(就像在默认的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' );
}

代码继续运行。活动子主题(或活动主题)的php文件。测试和工作。

类似:根据装运国家/地区将Woocommerce签出电话字段设置为可选相关:根据Woocommerce签出中的复选框显示隐藏订单注释字段

 类似资料:
  • 在Woocommerce中,我在Woocommerce中的账单明细之前添加了一个新的自定义结账字段?来自@LoicTheAztec,效果完美。 我有麻烦在管理订单页面显示信息。 然后,我尝试使用“添加订单元数据”来创建Commerce管理订单概述,对代码进行了一些更改以满足我的需要: 显示额外详细信息和某些字段:但不显示自定义字段值。 我还在想我到底做错了什么。关于我应该去哪里看有什么建议吗?

  • 我遇到了这样一个问题:如何在默认情况下清空除country之外的所有WooCommerce签出字段?类似的问题,有一个答案代码,可以满足我的需要,但当客户点击结帐按钮时,该代码将清空所有woocommerce配送和账单结帐字段。 如果我只希望shipping字段为空,代码会是什么样子?

  • 我需要在管理订单页面、谢谢和电子邮件通知中显示我的自定义签出字段。 我正在使用验证和保存WooCommerce回答代码中特定支付网关的额外结账字段来显示,验证和保存我的自定义字段。 从显示管理订单详细信息上的自定义字段数据,我试图显示自定义字段保存的输入值。 这是我到目前为止的代码: 但它不起作用。该字段不会附加到数据库中,但不会显示在任何位置: 如何正确显示字段?

  • 大家好,我通过搜索并找到解决方案,对我在woocommerce上的结帐进行了一些编辑。 到目前为止,我已经做到了,所以我跳过购物车/篮子,直接去结账,并重命名了订单笔记文件。 我正在挣扎的是如何将订单注释字段移动到订单评论上方。我知道我需要使用这个woocommerce_checkout_before_order_review但我不知道如何使用。任何帮助都会很棒吗?

  • 问题内容: 使用适用于Android和iOS的Phonegap 3.6.3创建移动应用程序。问题仅适用于Android,因为iOS的运行方式符合我的期望。 当我单击输入文本字段或文本区域时,将出现软键盘。它有时涵盖这些元素。 这些页面被放置在iScroll的底部,并位于另一个绝对放置的div中,因此,一旦屏幕弹出,我将无法滚动到其中任何一个页面。我怀疑键盘抬起时必须将Webview更改为较小。但是

  • 我如何在swagger-ui.html上隐藏响应类型的描述。 springfox版本:2.8.0 springfox-ui版本:2.8.0