Php Woocommerce附加注册字段验证不起作用

Php Woocommerce附加注册字段验证不起作用,php,wordpress,validation,woocommerce,registration,Php,Wordpress,Validation,Woocommerce,Registration,我已经按照教程为注册添加了一个额外的字段,但我无法让它进行验证。它不需要保存,只需要一个一次性的问题来确认用户正在做正确的事情 我已经在functions.php中添加了以下内容,但它不起作用。。。有人知道为什么吗 function wooc_extra_register_fields() { ?> <?php if (($_GET['register'] == 'instructor')) : ?> <p class="form-row form-row-wide"&g

我已经按照教程为注册添加了一个额外的字段,但我无法让它进行验证。它不需要保存,只需要一个一次性的问题来确认用户正在做正确的事情

我已经在functions.php中添加了以下内容,但它不起作用。。。有人知道为什么吗

function wooc_extra_register_fields() {
?>
<?php if (($_GET['register'] == 'instructor')) : ?>
<p class="form-row form-row-wide">
<label for="reg_instructor"><?php _e( 'Please confirm you\'re trying to register as an instructor', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="checkbox" class="checkbox" name="instructor" id="reg_instructor" value="<?php if ( ! empty( $_POST['instructor'] ) ) echo esc_attr( $_POST['instructor'] ); ?>" />
</p>
<?php endif; ?>
<?php
}


add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
if ( isset( $_POST['instructor'] ) && empty( $_POST['instructor'] ) ) {
$validation_errors->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ) );
}
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );


add_action('user_profile_update_errors','instructor_validation',10,1);
function instructor_validation($args)
{
if ( isset( $_POST['instructor'] ) && empty( $_POST['instructor'] ) ) {
$args->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ),'');
}
}


function wooc_save_extra_register_fields( $customer_id ) {
if ( isset( $_POST['instructor'] ) ) {
update_user_meta( $customer_id, 'instructor', sanitize_text_field( $_POST['instructor'] ) );
}
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );
函数wooc\u额外\u寄存器\u字段(){
?>

*


完全未测试,因为我现在无法检查它。但您似乎没有复选框的值。然后,您正在验证
if(设置($\u POST['讲师])&空($\u POST['讲师]))
但是如果设置了复选框,那么它就永远不会
为空
,因此您的条件永远不会满足。最后,您不需要
清理文本字段()
,因为它不是文本字段

相反,我将复选框值设置为
1
,并测试发布的值是否等于1。WooCommerce实际上对布尔复选框使用了大量
yes
no
相比,这可能更容易,因此如果需要,您可以尝试。但对于测试复选框是否被选中并等于某个特定的值,它几乎没有没关系

function wooc_extra_register_fields() { ?>
    <?php if ( isset($_GET['register']) && ($_GET['register'] == 'instructor')) : ?>
    <p class="form-row form-row-wide">
    <label for="reg_instructor"><?php _e( 'Please confirm you\'re trying to register as an instructor', 'woocommerce' ); ?> <span class="required">*</span></label>
    <input type="checkbox" class="checkbox" name="instructor" id="reg_instructor" value="1" <?php checked ( isset($_POST['instructor']) && 1 == $_POST['instructor'], true ); ?>/>
    </p>
    <?php endif; ?>
<?php
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );


function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
    if ( ! isset( $_POST['instructor'] ) || 1 != $_POST['instructor'] ) {
        $validation_errors->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ) );
    }
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );



function instructor_validation($args){
    if ( ! isset( $_POST['instructor'] ) || 1 != $_POST['instructor'] ) {
        $args->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ),'');
    }
}
add_action('user_profile_update_errors','instructor_validation',10,1);


function wooc_save_extra_register_fields( $customer_id ) {
    if ( isset( $_POST['instructor'] ) && 1 == $_POST['instructor'] ) {
        update_user_meta( $customer_id, 'instructor', 1 );
    }
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );

完全未测试,因为我现在无法检查它。但您似乎没有复选框的值。然后,您正在验证
if(设置($\u POST['讲师])&空($\u POST['讲师]))
但是如果设置了复选框,那么它就永远不会
为空
,因此您的条件永远不会满足。最后,您不需要
清理文本字段()
,因为它不是文本字段

相反,我将复选框值设置为
1
,并测试发布的值是否等于1。WooCommerce实际上对布尔复选框使用了大量
yes
no
相比,这可能更容易,因此如果需要,您可以尝试。但对于测试复选框是否被选中并等于某个特定的值,它几乎没有没关系

function wooc_extra_register_fields() { ?>
    <?php if ( isset($_GET['register']) && ($_GET['register'] == 'instructor')) : ?>
    <p class="form-row form-row-wide">
    <label for="reg_instructor"><?php _e( 'Please confirm you\'re trying to register as an instructor', 'woocommerce' ); ?> <span class="required">*</span></label>
    <input type="checkbox" class="checkbox" name="instructor" id="reg_instructor" value="1" <?php checked ( isset($_POST['instructor']) && 1 == $_POST['instructor'], true ); ?>/>
    </p>
    <?php endif; ?>
<?php
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );


function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) {
    if ( ! isset( $_POST['instructor'] ) || 1 != $_POST['instructor'] ) {
        $validation_errors->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ) );
    }
}
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 );



function instructor_validation($args){
    if ( ! isset( $_POST['instructor'] ) || 1 != $_POST['instructor'] ) {
        $args->add( 'instructor_error', __( 'You must be an instructor!', 'woocommerce' ),'');
    }
}
add_action('user_profile_update_errors','instructor_validation',10,1);


function wooc_save_extra_register_fields( $customer_id ) {
    if ( isset( $_POST['instructor'] ) && 1 == $_POST['instructor'] ) {
        update_user_meta( $customer_id, 'instructor', 1 );
    }
}
add_action( 'woocommerce_created_customer', 'wooc_save_extra_register_fields' );

您好,这很好!谢谢…只有一个轻微的错误是双重的&&&&,但除此之外,它是爆炸式的,所以谢谢您的帮助!验证中另一个奇怪的事情是一次弹出一个错误-它不会一次显示所有的错误…这是woocommerce所做的,还是与abov函数有关e?令人烦恼的是,它在提交表单时也没有保存额外的复选框?我认为一次一个错误就是WooCommerce的行为。一旦出现错误,它将向验证函数返回一个
false
,并提前退出。至少它在添加到购物车验证时是这样工作的,所以我假设它与h类似我不确定它为什么不保存用户元。我会尝试在
wooc\u save\u extra\u register\u fields()
函数中的
error\u log(json\u encode($\u POST))
,只要您启用了它。我还会尝试“error\u log”(获取用户元($user\u id));错误会一次弹出-它不会一次显示所有错误…这是woocommerce所做的事情,还是与上述功能有关?令人烦恼的是,它在提交表单时也不会保存额外的复选框?我认为一次一个错误就是woocommerce的行为。一旦出现错误,它将返回
false
到验证函数并提前退出。至少它在添加到购物车验证时是这样工作的,所以我假设它在这里是类似的。我不确定为什么它不会保存用户元。我会尝试在
wooc\u save\u extra\u register\u字段()中
error\u log(json\u encode($\u POST))
功能,只要您启用。我也会尝试在新用户的id上写“error_log(get_user_meta($user_id))”,以确保它没有保存,而不是您没有正确检索它。我曾经多次遇到过这种情况。