在WooCommerce中,我使用以下代码在客户注册表中添加了一个定制的"隐私"复选框:

// Addind a checkbox to registration form
add_action( 'woocommerce_register_form', 'add_privacy_checkbox_registration' );
function add_privacy_checkbox_registration() {
    $checkbox_text = sprintf( '%s <a href="%s"><strong>%s</strong></a>', __( 'Я прочитал и согласен с' ), 
    esc_url( site_url('/politic-conf/') ), __( 'политикой конфиденциальности' ) );
    ?>
    <div class="woocommerce-privacy-policy-wrapper">
        <p class="form-row validate-required">
            <label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
            <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="privacy_policy" <?php checked( false, true ); ?> id="privacy-policy" />
                <span class="woocommerce-privacy-policy-checkbox-text"><?php echo $checkbox_text; ?></span> <abbr class="required" title="<?php esc_attr_e( 'required', 'woocommerce' ); ?>">*</abbr>
            </label>
            <input type="hidden" name="policy-field" value="1" />
        </p>
    </div>
    <?php
}

// The validation
add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 10, 3 );
function privacy_checkbox_registration_validation( $errors ) {
 
    if( is_checkout() ) {
        return $errors;
    }
 
    if ( empty( $_POST[ 'privacy_policy' ] ) ) {
        $errors->add( 'privacy_policy_reg_error', 'Вам нужно принять политику конфиденциальности.' );
    }
 
    return $errors;
 
}

密码起作用了.该复选框已添加.复选框逻辑起作用. 也就是说,如果您不选中该框,将不会有用户注册.

但这其中存在一个问题.如果未单击复选框,则错误文本不会显示在屏幕上...

这是我的网站有问题的页面-page with issue

有什么主意吗?

推荐答案

我已经在测试网站上测试了您的代码,它对我很有效,当未选中复选框时会显示错误通知…

现在,在最后一个函数中,您声明了add_filter()个部分中的3个参数,因此其中缺少2个参数,其中缺少一些东西.此外,我还简化了您的代码

以下是最后一个函数的重新访问代码:

// The validation
add_filter( 'woocommerce_registration_errors', 'privacy_checkbox_registration_validation', 999, 3 );
function privacy_checkbox_registration_validation( $errors, $username, $email ) {
    // Not on checkout page
    if( ! is_checkout() && empty( $_POST[ 'privacy_policy' ] ) ) {
        $errors->add( 'privacy_policy_error', 'Вам нужно принять политику конфиденциальности.' );
    }
    return $errors;
}

现在我不确定这是否会解决您的问题,因为页面在提交时会重新加载到您的网站上,因此错误消息没有时间显示.

Php相关问答推荐

使用额外的输入字段自定义WooCommerce单个产品

如何更改数据表行背景 colored颜色

Htaccess-重写对&api.php";的API请求以及对";web.php";的其他请求

通过注册在Laravel中分配角色

如何修复警告:当使用WordPress get_the_Terms()时,Foreach()参数必须是ARRAY|OBJECT类型?

为什么正则表达式与得到的文本块之前得到的也行?

如何在Foreach语句中使用php和li按降序排序?

从WooCommerce订单状态更改更新用户自定义元数据

Symfony 6.2 IsGraned具有多个角色

Laravel 10中的Validator类

.htaccess 重写规则问题

使用动态地址和动态文件创建zip文件并获取zip文件链接

注册命名空间后如何获取xml node 值?

Laravel 路由参数中的 ":" 是什么?

将Shopware 6后端中定义的值导入MultiFilter

Symfony 迁移判断器在我的工作中失控

PHP 日期格式:ISO8601 与 ISO8601_EXPANDED

即使密码匹配,密码处理程序也会返回错误

Laravel 响应 html 默认页面忽略控制器

如何通过本地主机在同一台 PC 上同时运行 Microsoft IIS 和 WAMP