Вот способ сделать это:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
А если вы хотите отобразить поле (и обновить поле) в форме редактирования учетной записи пользователя:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.