Я ищу простой способ разместить форму регистрации пользователя на сайте WordPress. Я уже использовал wp_login_form (), чтобы поместить форму входа в систему, но теперь мне нужно сделать то же самое с формой регистрации.
Есть идеи?
Я ищу простой способ разместить форму регистрации пользователя на сайте WordPress. Я уже использовал wp_login_form (), чтобы поместить форму входа в систему, но теперь мне нужно сделать то же самое с формой регистрации.
Есть идеи?
Ответы:
Джефф Старр (Jeff Starr) написал отличный учебник по регистрации фронтэнда, восстановлению логина и пароля
, используя аналогичный подход, предложенный onetrickpony . Так что примите это как продолжение его ответа и как еще один ресурс, который может помочь вам сделать это:
http://digwp.com/2010/12/login-register-password-code/
Теперь у вас есть два примера того, как написать это самостоятельно и довериться мне - определенно стоит сделать это (по-своему). Это не так сложно, и это дает вам свободу , гибкость и возможность повторного использования, которые не может предложить ни один плагин.
если вы хотите справиться с этим самостоятельно, вот что я использую:
add_action('template_redirect', 'register_a_user');
function register_a_user(){
if(isset($_GET['do']) && $_GET['do'] == 'register'):
$errors = array();
if(empty($_POST['user']) || empty($_POST['email'])) $errors[] = 'provide a user and email';
if(!empty($_POST['spam'])) $errors[] = 'gtfo spammer';
$user_login = esc_attr($_POST['user']);
$user_email = esc_attr($_POST['email']);
require_once(ABSPATH.WPINC.'/registration.php');
$sanitized_user_login = sanitize_user($user_login);
$user_email = apply_filters('user_registration_email', $user_email);
if(!is_email($user_email)) $errors[] = 'invalid e-mail';
elseif(email_exists($user_email)) $errors[] = 'this email is already registered, bla bla...';
if(empty($sanitized_user_login) || !validate_username($user_login)) $errors[] = 'invalid user name';
elseif(username_exists($sanitized_user_login)) $errors[] = 'user name already exists';
if(empty($errors)):
$user_pass = wp_generate_password();
$user_id = wp_create_user($sanitized_user_login, $user_pass, $user_email);
if(!$user_id):
$errors[] = 'registration failed...';
else:
update_user_option($user_id, 'default_password_nag', true, true);
wp_new_user_notification($user_id, $user_pass);
endif;
endif;
if(!empty($errors)) define('REGISTRATION_ERROR', serialize($errors));
else define('REGISTERED_A_USER', $user_email);
endif;
}
код практически идентичен коду со страницы регистрации пользователя.
затем добавьте вашу форму в шаблон:
<?php
if(defined('REGISTRATION_ERROR'))
foreach(unserialize(REGISTRATION_ERROR) as $error)
echo "<div class=\"error\">{$error}</div>";
// errors here, if any
elseif(defined('REGISTERED_A_USER'))
echo 'a email has been sent to '.REGISTERED_A_USER;
?>
<form method="post" action="<?php echo add_query_arg('do', 'register', home_url('/')); ?>">
<label>
User:
<input type="text" name="user" value=""/>
</label>
<label>
Email:
<input type="text" name="email" value="" />
</label>
<label>
Delete this text:
<input type="text" name="spam" value="some_crappy_spam_protection" />
</label>
<input type="submit" value="register" />
</form>
Вы можете создать виджет с этим, шорткодом или просто обычным шаблоном страницы ...
home_url()
с URL текущей страницы, потому что мой код предполагает, что форма находится на главной странице. Я разместил здесь get_current_page_url()
функцию по другому вопросу, не помню, какой именно
Gravity Forms - лучший плагин контактной формы для WordPress, IMO. Там в новейшей версии, в бета-версии, есть дополнение для регистрации пользователей. Я попробовал это, и это прекрасно работает. Это будет стоить вам, хотя ... это $ 199 за лицензию разработчика.
Страница с ценами http://www.gravityforms.com/purchase-gravity-forms/
В блоге рассказывается о дополнении регистрации пользователя http://www.gravityhelp.com/
Я очень рекомендую этот плагин сообществу WordPress.
Подробные характеристики:
Вот некоторые из функций дополнения регистрации пользователя:
Попробуйте подключить плагин simplemodal. Он позволяет регистрироваться и входить в систему (Вы должны включить регистрацию пользователя), и у него очень приятный вид.
Вы можете использовать плагин Theme My Login
Вот хороший и простой способ сделать это:
Скопируйте имена полей и любой другой материал из текущей регистрационной формы Wordpress. Убедитесь, что ваша пользовательская форма имеет те же поля с именами, включая скрытые, а затем просто укажите действие формы на правильный URL-адрес регистрации: http://www.yourblog.com/wp-login.php?action=register - тогда вы можете захотеть изменить способ перенаправления формы после регистрации, если вам не нравится, как она обрабатывается.
Существует также этот плагин, который называется Insite Login, который позволяет вам перетащить регистрационную форму, форму входа и другие страницы на ваш сайт: http://wordpress.org/extend/plugins/insitelogin/
Первое решение должно делать то, что вы хотите.
Если вам нужно больше полей в вашей регистрационной форме, вы можете использовать плагин Profile Builder
Он позволяет настроить ваш сайт, добавив внешние формы для входа в систему, регистрации и редактирования профиля с помощью коротких кодов.