Хак: поведение сайта при необновленном профиле
Очередная штука понадобилась клиенту:
Представьте, себе 3 ситуации:
- Вы регистрируете пользователя самостоятельно, но НЕ заходите под его аккаунт, предоставляя эту возможность самому пользовател.
- Вы используете автоматический скрипт регистрации пользователя, который, естественно, никуда не заходит, а просто добавляет пользователя в базу.
- Вы хотите, чтобы пользователь после самой первой авторизации обязательно заходил в профиль и обновлял его (изменял данные, добавлял обязательные), иначе не имел доступа к сайту и постоянно перенаправлялся на регистрацию редактирование профиля.
Итак, решаем поставленные задачи всего двумя простенькими функциями. Ниже непосредственно код, далее – описание логики.
add_action('init', 'check_if_visited'); function check_if_visited(){ global $bp; if ( is_user_logged_in() ){ if ( empty($bp->loggedin_user->userdata->user_url)){ add_action('template_notices', 'notice_not_edited'); if($bp->current_component != 'profile' && $bp->current_action != 'edit' ) { wp_redirect($bp->loggedin_user->domain . BP_XPROFILE_SLUG .'/edit/'); die; } } } } function notice_not_edited(){ echo '<div id="message" class="error"><p>You visit the community for the first time. Please update your profile.</p></div>
'; }
В первой функции мы проверяем – обновлялся ли хоть раз профиль пользователя. Хитрость в том, что при добавлении пользователя (будь то ручное или через обычную страницу регистрации на морде) поле user_url
в таблице wp_users
не заполняется автоматически. Именно поэтому появляется возможность делать проверку на то, пустое ли оно. Далее по коду в первой функции мы добавляем соответствующее уведомление о том, что пользователю надо обновить профиль (измените текст на свой) и делаем редирект на страницу редактирования.
При обновлении пользователем формы это поле автоматически заполняется чем-то вроде: http://example.com/members/user-login/
Если же у пользователя это поле заполненно (то есть он обновил свой профиль), то редиректа не будет и уведомление пропадет. Работает для каждого пользователя в отдельности.
Код размещаете в functions.php шаблона.
хорошее решение! еще бы в базе были данные по авкам… ;)
Хех, с авами не смотрел код :) Но я вообще-то даже знаю, как это сделать. Если будет время, то сделаю нечто подобное и для ав.
Кстати, исправил крупнейший баг в этом коде – он всех неавторизованных отсылал в бесконечный неправильный редирект. Теперь все ок, проверено.