Поддержка Проблемы и решения Реферальная система при регистрации

  • Доброго времени суток!

    Делаю регистрацию под рефералом и стоит вот какая задача:

    Имею дочернюю тему и файл функции
    в котором необходимо при нажатии зарегистрироваться согласно ссылки: http://mysite.ru/wp-login.php?action=register&sp=shadowxak

    записать в БД следующее:

    в таблицу wp_usermeta 1 поле refer в поле meta_key = refer и в поле meta_value = ID, где ID — это id 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>Вас пригласил:
    	<input id="sp" class="input" type="text" value="<?php echo $_GET['sp']; ?>" name="sp" disabled="disabled" /></label>
    </p>
    <?php }
    
    function check_fields ( $login, $email, $errors ) {
    global $sp;
    
    if ($_POST['sp'] == ''){
    	$errors->add( 'empty_realname', "ОШИБКА: Не указан реферал?" );
    } else {
    	$sp = $_POST['sp'];
    }
    }
    
    function register_fields($user_id,$password= "",$meta=array()){
    	update_user_meta( $user_id, 'refer', $_POST['sp'] );
    }

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • если реферы это зарегистрированный пользователи, то используйте условный тег 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 это условный тег, вы его используете неправильно в коде.

    Сделал все через куки 🙂
    как причешу скину код, для сообщества

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Реферальная система при регистрации» закрыта для новых ответов.