Показ чего-либо в зависимости от состояния поля в профиле пользователя…

👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

Не могу найти подробнее информацию для новичков как сделать такое: зарегистрировавшийся человек должен заполнить анкету и пока он не заполнит, в сайдбаре или еще где будет торчать большая кнопка «ЗАПОЛНИ АНКЕТУ». Когда он заполняет анкету, то эта кнопка пропадает. Читал статью о перенаправлении на определенную страницу, но это немного не то, хоть и временное решение. Я так понял, что логика такая:
1. у каждого в профиле есть мета поле в котором сохраняется значение заполненности анкеты
2. кнопка «ЗАПОЛНИ АНКЕТУ» должна как-то проверять это поле на значение и если там пусто, 0 или ‘нет’ то выводиться, а если ‘да’ то прятаться
3. при сабмите формы должно что-то срабатывать и менять значение в этом поле на 1 или ‘да’

Начал делать так:
1. Создаем у всех пользователей в профиле дополнительное поле.
Я создавал так, в functions.php текущей темы добавил

// Добавить в профиль дополнительное поле
add_filter('user_contactmethods', 'my_user_contactmethods'); 
function my_user_contactmethods($user_contactmethods){ 
$user_contactmethods['anketa'] = 'Анкета заполнена?'; 
return $user_contactmethods; 
} 

В итоге в каждом профиле появляется пустое поле ‘Анкета заполнена?’.

2. Состряпал код, который по идее должен менять значение в нужном поле в профиле

// Записать в поле в профиле значение

Дальше дело встало.. (( Не могу сообразить куда вставить этот код (ищу в gravity forms, но там уж очень много кода).
До конструкции проверяющей значение поля и выводящую/прячущую кнопку даже не дошел.

Может есть более простое и элегантное решение подобной задачи?

Создай свой первый сайт на WordPress

Dymskiy
Оцените автора
Добавить комментарий

  1. tiaurus

    Думаю, что можно подобное сделать без введения дополнительного поля. Для этого нужно определиться, какие поля в профиле нужно заполнить, чтобы профиль считался заполненным полностью.

    Предположим, что профиль будет заполненным полностью, если пользователь заполнит Био и Сайт. Нужно вставить условие: ЕСЛИ био ИЛИ сайт отсутствуют, то выводим надпись.

    Получить и вывести БИО текущего пользователя можно так:

    <?php 
        $user_info = get_userdata($current_user->ID); 
    	echo $user_info-> user_description ;
    ?>
    

    Получить и вывести САЙТ текущего пользователя можно так:

    <?php 
        $user_info = get_userdata($current_user->ID); 
    	echo $user_info-> user_url ;
    ?>
    

    Подробнее о том, как можно получить данные текущего пользователя: http://codex.wordpress.org/Function_Reference/get_userdata

    Проверить, заполнено ли поле БИО в профиле текущего пользователя, и вывести его, значение, если оно есть, можно так:

    <?php if($user_info = get_userdata($current_user->ID)): ?>
        <?php echo $user_info-> user_description ; ?>
    <?php endif; ?>
    

    Выведем надпись, показывающую пользователю, что нужно заполнить поле БИО в профиле:

    //Получаем значение поля БИО
    <?php 
        $user_info = get_userdata($current_user->ID); 
    	$bio = $user_info-> user_description ;
    ?>
    //Проверяем, заполнено ли поле БИО
    <?php if($bio == ''): ?>
        <?php echo 'Заполните БИО в профиле' ; ?>
    <?php endif; ?>
    

    Выведем надпись, показывающую пользователю, что нужно заполнить поле САЙТ в профиле:

    //Получаем значение поля САЙТ
    <?php 
        $user_info = get_userdata($current_user->ID); 
    	$site = $user_info-> user_url ;
    ?>
    //Проверяем, заполнено ли поле БИО
    <?php if($site == ''): ?>
        <?php echo 'Заполните САЙТ в профиле' ; ?>
    <?php endif; ?>
    

    Объединим два условия:

    //Получаем значение полей БИО и САЙТ
    <?php 
        $user_info = get_userdata($current_user->ID); 
    	$bio = $user_info-> user_description ;
    	$site = $user_info-> user_url ;
    ?>
    //Проверяем, заполнено ли поле БИО или поле САЙТ, и выводим надпись, если хотя бы одно из полей не заполнено
    <?php if(($bio == '') && ($site == '')): ?>
        <?php echo 'Заполните данные профиля' ; ?>
    <?php endif; ?>
    

    Я мог ошибиться в деталях кода, так как не программист, но логика примерно такая.

    Ответить
  2. Dymskiy автор

    О ужас.. Жаль в посте поправить ничего не могу, но АНКЕТА и ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ в данном вопросе — это разные вещи… На самом деле вопрос был совсем не про заполненность профиля пользователя, а про заполненность любой формы на сайте т.е. если я вдруг решил провести среди пользователей анкетирование по какому-то вопросу и предлагаю им заполнить трехэтажную форму, по-этому и про большую кнопку говорю и вопрос называется «показ чего-либо в зависимости от состояния поля в профиле».. Такой хороший ответ, но не мой вопрос.. (

    Ответить
  3. Dymskiy автор

    И проблема у такого как я часто бывает даже не с тем чтобы написать кусок кода (есть в интернет примеры, (в том же кодексе) в которые можно по аналогии вписать свои значения), а в том КУДА этот кусок кода пихать… (

    Ответить
  4. Dymskiy автор

    Задал подобный вопрос в посте про редирект может это решит мой вопрос лучше чем кнопка..

    Ответить