если реферы это зарегистрированный пользователи, то используйте условный тег username_exists.
Всяко пробовал, но ничего не получается.
Рефка: http://mysite.ru/wp-login.php?action=register&sponsor=shadowxak
Приведу код полностью функции в шаблоне:
<?php
add_action('register_form','show_fields');
add_action('register_post','check_fields',10,3);
add_action('user_register', 'register_fields');
function show_fields() {
?>
<p>
<label>Дата рождения<br/>
<input id="date_of_birth" class="input" type="date" value="<?php echo $_POST['date_of_birth']; ?>" name="date_of_birth" /></label>
</p>
<p>
<label>Номер сотового(+70000000000)<br/>
<input id="mobile" class="input" type="text" value="<?php echo $_POST['mobile']; ?>" name="mobile" /></label>
</p>
<p>
<label>Вас пригласил:<br/>
<input id="sponsor" class="input" type="text" value="<?php echo $_GET['sponsor'] ?>" name="sponsor" disabled="disabled" /></label>
</p>
<?php }
function check_fields ( $login, $email, $errors ) {
global $date_of_birth, $mobile, $sponsor;
if ($_POST['date_of_birth'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указана дата рождения?" );
} else {
$date_of_birth = $_POST['date_of_birth'];
}
if ($_POST['mobile'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан номер телефона?" );
} else {
$mobile = $_POST['mobile'];
}
if ($_POST['sponsor'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан пригласитель!" );
} else {
$sponsor = username_exists($_POST['sponsor']);
}
}
function register_fields($user_id,$password= "",$meta=array()){
$refer = username_exists($_POST['sponsor']);
update_user_meta( $user_id, 'date_of_birth', $_POST['date_of_birth'] );
update_user_meta( $user_id, 'mobile', $_POST['mobile'] );
update_user_meta( $user_id, 'sponsor', $refer );
}
Мое предположение вот какое:
При нажатии кнопки зарегистрироваться в функцию check_fields параметр $_POST[‘sponsor’] не передается, полагаю что из-за того что в функции show_fields я его обрабатываю GET запросом из командной строки, а после нажатии зарегистрироваться параметр из строки пропадает и POST из формы не передает и не обрабатывает срабатывает «ОШИБКА: Не указан пригласитель!» и естественно регистрация не происходит.
Полагаю необходимо для успешного выполнения сохранять реферальную ссылку в строке браузера, но как это реализовать не меняя движек не знаю.
Так же возможно глаз замылился и я явно не вижу ошибки 🙁
что-то вы чудите, там миллион обходных путей, например так можно:
add_action('register_form','show_fields');
add_action('register_post','check_fields',10,3);
add_action('user_register', 'register_fields');
function show_fields() {
?>
<p>
<label>Дата рождения<br/>
<input id="date_of_birth" class="input" type="date" value="<?php echo $_POST['date_of_birth']; ?>" name="date_of_birth" /></label>
</p>
<p>
<label>Номер сотового(+70000000000)<br/>
<input id="mobile" class="input" type="text" value="<?php echo $_POST['mobile']; ?>" name="mobile" /></label>
</p>
<p>
<label>Вас пригласил:<br/>
<input id="sponsor" class="input" type="text" value="<?php echo $_GET['sponsor'] ?>" name="sponsor" disabled="disabled" /></label>
</p>
<?php
$test = $_GET['sponsor'];
add_option('test', '','','yes');
update_option('test', $test);
}
function check_fields ( $login, $email, $errors ) {
global $date_of_birth, $mobile, $sponsor, $refer;
if ($_POST['date_of_birth'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указана дата рождения?" );
} else {
$date_of_birth = $_POST['date_of_birth'];
}
if ($_POST['mobile'] == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан номер телефона?" );
} else {
$mobile = $_POST['mobile'];
}
$test = get_option('test');
if ($test == ''){
$errors->add( 'empty_realname', "ОШИБКА: Не указан пригласитель!" );
} else {
if (!username_exists($test))
$errors->add( 'empty_realname', "ОШИБКА: Нет такого пригласителя!" );
}
}
function register_fields($user_id,$password= "",$meta=array()){
$refer = username_exists($_POST['sponsor']);
update_user_meta( $user_id, 'date_of_birth', $_POST['date_of_birth'] );
update_user_meta( $user_id, 'mobile', $_POST['mobile'] );
update_user_meta( $user_id, 'sponsor', $refer );
}
а username_exists это условный тег, вы его используете неправильно в коде.
Сделал все через куки 🙂
как причешу скину код, для сообщества