php - 在 Woocommerce 我的帐户地址和帐户详细信息中设置唯一的验证错误通知

标签 php wordpress validation woocommerce hook-woocommerce

如果必填字段为空,Woocommerce 结帐页面和我的帐户页面中的账单字段会显示个别错误。那么,如果所有字段均为空,则这些空字段的所有错误将显示为:
- 名字是必填字段
- 姓氏为必填字段
- 街道地址为必填字段
等等...

如果所有必填字段均为空,我只想显示一个错误,例如“错误:所有字段均为空。请填写所有必填字段才能下订单。”好吧,我用下面的代码在结账页面上解决了这个问题:

add_action( 'woocommerce_after_checkout_validation', 'show_one_err', 9999, 2);
function show_one_err( $fields, $errors ){
    // if any validation errors
    if( !empty( $errors->get_error_codes() ) ) {

        // remove all of them
        foreach( $errors->get_error_codes() as $code ) {
            $errors->remove( $code );
        }

        // add our custom one
        $errors->add( 'validation', 'Please fill in all required fields to place order.' );
    }
}

我现在的问题是如何在 Woocommerce 我的帐户页面 - 帐单地址以及我的帐户 - 帐户详细信息选项卡中应用这些更改。我进行这些更改的唯一目的是在所有 Woocommerce 字段中提供一致的错误通知(请参阅下面的附图)。

结账页面

Checkout page

我的帐户 - 帐单地址

My Account - billing address

我的帐户 - 帐户详细信息

My Account - account details

最佳答案

要将所有字段验证错误替换为帐户账单和送货地址以及帐户详细信息中的唯一自定义错误,您将使用以下 Hook 函数,该函数使用两个验证 Hook :

add_action( 'woocommerce_save_account_details_errors', 'account_validation_unique_error', 9999 ); // Details
add_action( 'woocommerce_after_save_address_validation', 'account_validation_unique_error', 9999 ); // Adresses
function account_validation_unique_error(){
    $notices = WC()->session->get( 'wc_notices' ); // Get Woocommerce notices from session

    // if any validation errors
    if( $notices && isset( $notices['error'] ) ) {

        // remove all of them
        WC()->session->__unset( 'wc_notices' );

        // Add one custom one instead
        wc_add_notice( __( 'Please fill in all required fields…', 'woocommerce' ), 'error' );
    }
}

代码位于事件子主题(事件主题)的 function.php 文件中。经过测试并有效。

enter image description here

相关: Set a unique validation error notice in Woocommerce checkout page

关于php - 在 Woocommerce 我的帐户地址和帐户详细信息中设置唯一的验证错误通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53279751/

相关文章:

php - 古腾堡 block : registering more than one block with `register_block_type_from_metadata()` throws errors in the console

angularjs - asyncValidator 依赖于其他字段的值

Php:使用 web.config 重写 URL

php - 当给定的哈希值存储在 MySQL 数据库中时,password_verify 无法按预期工作

php - 将所有数据从一张表转移到另一张表

php - 在 Woocommerce 中排除相关产品 ID

php - SQL 不使用的字符

javascript - 在 ajax 加载部分中不工作 jquery

validation - Grails inList约束在错误消息中获取inList映射的值

java - 日期验证,包括相应月份的天数