Проверка регистрации Woocommerce, если реферальный код действителен - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу добавить чек в мою регистрационную форму woocommerce, чтобы проверить, существует ли реферальный код, заданный в качестве настраиваемого поля (повторителя) в серверной части. В настоящее время он настроен с помощью расширенных настраиваемых полей и установлен на странице параметров. Следует проверить, есть ли код в полях повторителя, иначе откажитесь от регистрации. Затем необходимо добавить код пользователю и показать в пользовательском бэкэнде.

Я пытался манипулировать кодом условий при регистрации, но нигде не получил. Спасибо

Это мой код ACF, чтобы получить действительные коды для проверки.

<?php

// check if the repeater field has rows of data
if( have_rows('referralcode', 'option') ):

    // loop through the rows of data
    while ( have_rows('referralcode', 'option') ) : the_row();

        // display a sub field value
        the_sub_field('referralvalue', 'option');

    endwhile;

else :
    // no rows found
endif;

?>

1 Ответ

0 голосов
/ 29 апреля 2018

Вот способ сделать это:

1) Добавить поле регистрации рефералов

add_action( 'woocommerce_register_form', 'add_referral_registration_field', 20 );
function add_referral_registration_field() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_referralcode"><?php _e( 'Referral code', 'woocommerce' ); ?><span class="required"> *</span></label>
        <input type="text" class="input-text" name="referralcode" id="reg_referralcode" value="<?php if ( ! empty( $_POST['referralcode'] ) ) esc_attr_e( $_POST['referralcode'] ); ?>" />
    </p>
    <?php
}

2) Проверить (или проверить) поле регистрации рефералов…

Здесь вы добавите свой код поля повторителя, чтобы проверить этот реферальный код

add_action( 'woocommerce_register_post', 'referral_registration_field_validation', 20, 3 );
function referral_registration_field_validation( $username, $email, $validation_errors ) {
    $domain = 'woocommerce';
    $error  = '<strong>' . __( 'Error', $domain ) . '</strong>: ';

    // HERE you get the array of referral codes (to be replaced with ACF code)
    $referral_codes_to_check = array("ABCABC","DEFDEF");

    if ( isset( $_POST['referralcode'] ) && empty( $_POST['referralcode'] ) )
    {
        $validation_errors->add( 'referralcode_error', $error . __( 'Referral code is required!', $domain ) );
    }
    // HERE BELOW we check the referral code
    elseif( ! in_array( $_POST['referralcode'], $referral_codes_to_check ) )
    {
        $validation_errors->add( 'referralcode_error', $error . __( 'This referral code is not valid, please try something else…', $domain ) );
    }
}

3) Сохранить данные поля реферала

add_action('woocommerce_created_customer', 'save_referral_registration_field_data', 20, 1 );
function save_referral_registration_field_data( $customer_id ) {

    // Referral code field
    if ( isset( $_POST['referralcode'] ) )
        update_user_meta( $customer_id, 'referralcode', sanitize_text_field( $_POST['referralcode'] ) );
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

enter image description here

enter image description here


А если вы хотите отобразить поле (и обновить поле) в форме редактирования учетной записи пользователя:

1) Изменить поле регистрации рефералов:

add_action( 'woocommerce_edit_account_form', 'edit_referral_registration_field', 20 );
function edit_referral_registration_field() {
    $user = wp_get_current_user();
    ?>
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
        <label for="referralcode"><?php _e( 'Referral code', 'woocommerce' ); ?>
        <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="referralcode" id="referralcode" value="<?php echo esc_attr( $user->referralcode ); ?>" />
    </p>
    <?php
}

2) Обновить поле регистрации рефералов:

add_action( 'woocommerce_save_account_details', 'save_referral_registration_field', 20, 1 );
function save_favorite_color_account_details( $user_id ) {

    if( isset( $_POST['referralcode'] ) )
        update_user_meta( $user_id, 'referralcode', sanitize_text_field( $_POST['referralcode'] ) );
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...