День добрый , уважаемые читатели!

Занимаюсь сейчас редизайном блога и хочу, чтобы у авторизованных пользователей были привелегии, по сравнению с неавторизованными (например профиль пользователя на отдельной странице блога + открытая для индексации ссылка на проект пользователя), что-то я отвлекся от темы хехе. Короче, мне понадобилась Ajax авторизация на блоге WordPress. Оказалось это не сверхъестественная штука, а все достаточно просто. Поехали!

Форма авторизации для работы с Ajax

Выводим форму входа в шаблоне

Первым делом нам нужно создать форму авторизации и естественно написать условия в каких случаях показывать форму входа, а когда данные пользователя. Для этого открываем любой файл шаблона (я открываю header.php — мне форма входа там нужна) а Вы можете открыть файл sidebar.php, теперь вставим в него следующий кусок кода:

<div class="login_box">

  <?php global $user_ID, $user_identity, $user_level; ?>

  <?php if (is_user_logged_in()) { ?>

    <?php echo get_avatar( $user_ID, 50 ); ?>

    <div class="user_aside">
      <span class="user_name">Привет, <strong><em><?php echo $user_identity; ?></em></strong></span>
      <a class="login_button" href="<?php bloginfo('url'); ?>/wp-admin/">Консоль</a>
      <a class="login_button" href="<?php bloginfo('url'); ?>/wp-admin/profile.php">Профиль</a>
      <a class="logout_button" href="<?php echo wp_logout_url( $_SERVER['REQUEST_URI'] ); ?>">Выйти</a>
    </div>

  <?php } else { ?>

    <form id="login" action="login" method="post">

      <p class="status_login"></p>

      <div class="line">
        <i class="icon-user"></i>
        <input id="username" class="input_text" type="text" placeholder="Ваш логин" name="username" />
      </div>

      <div class="line">
        <i class="icon-key"></i>
        <input id="password" class="input_text" type="password" placeholder="Ваш пароль" name="password" />
      </div>

      <div class="line" style="display: none;">
        <input name="rememberme" type="checkbox" id="my-rememberme" checked="checked" value="forever" />
      </div>

      <div class="line cf">
        <input class="submit_button" type="submit" value="Войти" name="submit">
        <div class="login_link">
          <a class="reg_link" href="<?php bloginfo('url'); ?>/wp-login.php?action=register">Регистрация</a> /
          <a class="lost_pass_link" href="<?php bloginfo('url'); ?>/wp-login.php?action=lostpassword">Забыли пароль?</a>
        </div>
      </div>

      <?php wp_nonce_field( 'ajax-login-nonce', 'security' ); ?>

    </form>
<?php } ?>

</div>

Чуток поясню, хоть код и достаточно прозрачный

Сначала определяем глобальные переменные $user_ID, $user_identity и $user_level. Далее условием определяем авторизован ли пользователь на блоге с помощью функции is_user_logged_in(), если вошел то отображаем его аватар, ник и ссылки на панель управления, профиль и выход. Для вывода и задания аватаров я использую плагин User Avatar.

Пользователь вошел на сайт с помощью Ajax

В случае когда пользователь не авторизован, то выводим форму входа. Форма входа содержит:

  • контейнер .status_login — в нем будем выводить информацию о ходе авторизации
  • для иконок в полях формы я использую сервис fontello (погуглите %), кстати их я позиционирую абсолютно поэтому Вы видете, что поле формы и иконка обернуты контейнером .line
  • чекбокс ‘запомнить данные пользователя’ я скрываю и по умолчанию осталяю его включенным checked="checked" — по сути пользователю видеть его не надо, да и в дизайн он вписывается слабовато
  • кнопка ‘Войти’ и ссылки на регистрацию и потеряли пароль. Кстати не забудьте на странице настроек WordPress установить галочку ‘любой может зарегистрироваться’
  • и самый важный момент это безопасность, поэтому обязательно пишем строку wp_nonce_field( 'ajax-login-nonce', 'security' );

Думаю тут все понятно, поэтому двигаемся дальше и добавим немного стилей для формы (я вырезал со своего файла стилей, Вы свои напишете):

.login_box {
	float: right;
	width: 580px;
	margin: 0 20px 0 0;
	background-color: #e1e1e1;
}
/* Form */
#login{
    padding: 40px 10px 25px 10px;
    width: 345px;
	position: relative;
}
.status_login {
    display: none;
	position: absolute;
	top: 15px;
	left: 0px;
	width: 100%;
	text-align: center;
	font-size: 12px;
	color: #666;
}
.line {
	position: relative;
}
.line i {
	position: absolute;
	left: 10px;
	top: 5px;
	color: #999999;
	font-size: 18px;
}
.line .input_text {
	display: block;
	width: 300px;
	height: 30px;
	margin: 0 0 10px;
	font-size: 15px;
	padding-left: 45px;
	box-shadow: 0 1px rgba(255,255,255,1);
	border: 1px solid #ccc;
	background-color: rgb(255,255,255);	
}
.line .input_text:focus {
	outline: none;
	border-color: #ff9900;
}
#login input:-webkit-autofill {
	background-color: rgb(255,255,255) !important;	
    -webkit-box-shadow:0 0 0 50px white inset;
}
.submit_button {
	display: block;
	width: 100px;
	height: 30px;
	float: left;
	margin: 0 30px 0 0;
	position: relative;
	border: none;
	background-color: #1688CA;
	border-bottom: 1px solid #fff;
	border-top: 1px solid #0071AD;
	background-image: -moz-linear-gradient(top, #3382AF, #1688CA);
	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3382AF), to(#1688CA));
	background-image: -webkit-linear-gradient(top, #3382AF, #1688CA);
	background-image: -o-linear-gradient(top, #3382AF, #1688CA);
	background-image: linear-gradient(top, #3382AF, #1688CA);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3382AF', endColorstr='#ff1688CA', GradientType=0);
	cursor: pointer;
	font-size: 14px;
	color: #f6f6f6;
}
/* User Login */
.login_link {
	float: right;
	display: block;
	font-size: 13px;
	margin: 5px 0 0;
	text-shadow: 0 1px white;
}
.login_link a {
	padding: 0 5px;
}
.login_box img {
	float: left;
	margin: 65px 15px 0px 20px;
}
.login_box .user_aside {
	float: left;
	margin: 65px 0 0 0;
}
.user_aside .user_name {
	font-size: 15px;
	display: block;
	padding: 3px 0;
}
.user_aside .user_name strong {
	text-shadow: 0 1px white;
}
.user_aside a {
	text-shadow: 0 1px white;
	font-size: 13px;
}
.user_aside a:hover,
.login_link a:hover {
	text-decoration: underline;
}

Со стилями разобрались, давайте теперь окунемся в функции WordPress.

Корректируем файл functions.php

Для корректной работы нашей авторизации будем пользоваться следующими функция:

  • wp_enque_script + wp_localize script
  • wp_nonce_field + check_ajax_referer
  • is_user_logged_in + wp_signon

Итак, открываем файл functions.php и вставляем туда следующий код:

<?php 

  //  Ajax Login
  function ajax_login_init(){
    
	/* Подключаем скрипт для авторизации */
    wp_register_script('ajax-login-script', get_template_directory_uri() . '/js/ajax-login-script.js', array('jquery') ); 
    wp_enqueue_script('ajax-login-script');
    
	/* Локализуем параметры скрипта */
    wp_localize_script( 'ajax-login-script', 'ajax_login_object', array( 
      'ajaxurl' => admin_url( 'admin-ajax.php' ),
      'redirecturl' => $_SERVER['REQUEST_URI'],
      'loadingmessage' => __('Проверяются данные, секундочку...')
    ));

    // Разрешаем запускать функцию ajax_login() пользователям без привелегий
    add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
  }

  // Выполняем авторизацию только если пользователь не вошел
  if (!is_user_logged_in()) {
    add_action('init', 'ajax_login_init');
  }

  function ajax_login(){

    // Первым делом проверяем параметр безопасности
    check_ajax_referer( 'ajax-login-nonce', 'security' );

    // Получаем данные из полей формы и проверяем их
    $info = array();
    $info['user_login'] = $_POST['username'];
    $info['user_password'] = $_POST['password'];
    $info['remember'] = true;

    $user_signon = wp_signon( $info, false );
    if ( is_wp_error($user_signon) ){
      echo json_encode(array('loggedin'=>false, 'message'=>__('Неправильный логин или пароль!')));
    } else {
      echo json_encode(array('loggedin'=>true, 'message'=>__('Отлично! Идет перенаправление...')));
    }

    die();
  }

?>

Все объяснения я вынес в условные комментарии в коде, что тут можно добавить, так это ссылку на использование Ajax в кодексе WordPress

До сих пор все было достаточно прозрачно, и скажу что самое сложное уже позади, но помните мы в functions.php подключили скрипт ajax-login-script.js и без него ничего не заработает. Поэтому напишем его.

jQuery Ajax Script

В папке с темой создаем папку js а в ней создадим пока пустой файл ajax-login-script.js, откроем его и внесем следующий код:

jQuery(document).ready(function($) {

  $('.login_box #login').on('submit', function(e){
    $('.login_box .status_login').show().text(ajax_login_object.loadingmessage);
    $.ajax({
      type: 'POST',
      dataType: 'json',
      url: ajax_login_object.ajaxurl,
      data: { 
        'action': 'ajaxlogin', //calls wp_ajax_nopriv_ajaxlogin
        'username': $('.login_box #username').val(), 
        'password': $('.login_box #password').val(), 
        'security': $('.login_box #security').val()
      },
      success: function(data){
        $('.login_box .status_login').text(data.message);
        if (data.loggedin == true){
          document.location.href = ajax_login_object.redirecturl;
        }
      }
    });
    e.preventDefault();
  });

});

Что здесь происходит? При событии отправки формы:

  • мы показываем контейнер .status_login с сообщением что проверяются отправленные данные
  • потом запускается ajax обработчик полученных данных
  • если все плохо, то получаем сообщение что имя пользователя или пароль неправльные
  • если все хорошо, то происходит перенаправление на страницу на которой мы находимся, только уже вместо формы показываются данные авторизованного пользователя

Заключение

Все! Теперь Ваша форма входа аяксимизирована (крутое слово), кстати напомню Вам что это лучший способ сделать Ajax авторизацию на блоге, как говорится с использованием лучших практик 20-го века. Да и вдохновился я у Natko.

Благдарности, пожелания, нарекания оставляйте в комментариях. И пожалуйста поделитесь статьей в социальных сетях, ведь все должны все знать! Спасибо за внимание!

Добавить комментарий:


Комментарии
  1. Natko Hasić

    Some credit would be nice though 🙂

  2. JAH

    Natko, Catch trackback!

  3. 高清电视棒

    分析的很透彻,很欣赏你的看法,学习了。

  4. 4idroid

    Скажите, это ваша собственная верстка сайта или скачанный шаблон?

  5. JAH

    4idroid, собственная) скачанные шаблоны нет времени править)

  6. 4idroid

    Крутая тема.

  7. Aleivl

    Странно, все сделал как описано, но дальше «Проверяются данные, секундочку…» процесс не пошел…

  8. JAH

    Aleivl, странно на нескольких разных локальных проектах поставил все работает отлично.. возможно что-то недописали или лишние <?php в файле function.php

  9. Aleivl

    JAH, уже разобрался, все отлично работает.
    А на сколько реально реализовать такую же историю с формой регистрации, чтобы все происходило так же в режиме ajax без редиректа на страницу регистрации?
    Есть ли примеры такой функции?
    Плагины видел, но они жутко тормозят (как правило) работу кмс, да плюс еще всякие конфликты возникают. С функциями я такого не наблюдал.
    Кстати, гуглил, вопрос весьма популярный, и нет ни одного реального примера, все ответы склоняются к использованию плагинов…

  10. JAH

    Aleivl, я думаю вполне реально. Как сам разберусь обязательно выложу как это сделать)

  11. Aleivl

    JAH, было бы круто! Я пытался сам разобраться на основе твоего с Natko Hasić скрипта, но мои познания весьма и весьма ограничены. 🙂
    Пока удалось тока вытащить из wp-login это:

    &lt;form name=&quot;registerform&quot; id=&quot;registerform&quot; action=&quot;" method="post"&gt;
    	
    		
    		&lt;input type=&quot;text&quot; name=&quot;user_login&quot; id=&quot;user_login&quot; class=&quot;input&quot; value=&quot;" size="20" /&gt;
    	
    	
    		
    		&lt;input type=&quot;text&quot; name=&quot;user_email&quot; id=&quot;user_email&quot; class=&quot;input&quot; value=&quot;" size="25" /&gt;
    	
    
    	
    	
    	&lt;input type=&quot;hidden&quot; name=&quot;redirect_to&quot; value=&quot;" /&gt;
    	&lt;input type=&quot;submit&quot; name=&quot;wp-submit&quot; id=&quot;wp-submit&quot; class=&quot;button button-primary button-large&quot; value=&quot;" /&gt;
    

    Но как это аяксимизировать без редиректа, пока ума не приложу. ^_^

  12. Oleg

    Все работает! Удивительно, с первого раза пошло. Обычно приходится по капать 🙂 Огромное спасибо JAH, буду читать еще статьи на вашем блоге.

  13. Artem

    Добрый день!
    Подскажите, что делать в этом случае:
    Warning: Cannot modify header information — headers already sent by (output started at Z:\home\localhost\www\wordpress\wp-content\themes\twentyeleven\functions.php:1) in Z:\home\localhost\www\wordpress\wp-includes\pluggable.php on line 876

  14. Alex

    Aleivl, подскажите, пожалуйста, как обойти зависание сообщения «Проверяются данные, секундочку…»?

  15. JAH

    Alex, в смысле «обойти зависание»?
    Тебе нужно его убрать чтобы оно не отображалось?

  16. Alex

    нет, у меня таже проблема, что и у Aleivl была 12.04.2013 в 21:55: «Странно, все сделал как описано, но дальше «Проверяются данные, секундочку…» процесс не пошел…».

  17. JAH

    Alex, попробуй так: открой сайт хромом, нажми f12 появится панель, потом кликай по кнопке войти и смотри в правый нижний угол панели — если там появится красный крестик то ошибка в скрипте или он конфликтует с другим скриптом….

    ну еще может быть чтото с кодировкой..

  18. Alex

    Скорей всего, что-то в functions.php лишнее прописал, потому что после установки новой не редактированной темы все сработало как часы. Буду выявлять методом исключений конфликтный код.
    Спасибо за статью! Успехов!

  19. JAH

    Alex, удачи)

  20. Denis

    I severely take pleasure in your posts. Many thanks

  21. LEGION

    Здравствуйте. Или я чего то не так понял, или страница после авторизации все равно перезагружается, а какой тогда смысл от ajax? О_о

  22. JAH

    LEGION, все правильно, перезагружается в целях безопасности, да и побыстрей срабатывает чем обычная авторизация (если обратите внимание на буржуйские премиум темы, то аяксовая отрисовка страниц тоже происходит с перезагрузкой, только на много быстрей чем обычный клик по ссылке).

    Ну еще отмечу что у себя на блоге ее убрал, потому что хостинг сам защищает ссылки на админчасть WP. Так что пользователям хостинга ukraine.com.ua такой метод не походит

  23. adminadmin

    напишите пост — как сделать аякс регистрацию в вордпресс в сайдбаре, при этом нужно что-бы юзеры оставались на странице с которой логинились, и без попадания в админку… Я мечтаю сделать регистрацию у себя в блоге, вот только варианты, что есть в НЭТЕ мне не подходят… Я видел только удин случай такой регистрации как я хочу на сайте с CMS WordPress, это gidonlinekini.com Можете сотворить что-то подобное??? Готов заплатить. Спасибо!

  24. Андрей

    Здравствуйте! У меня такой вопрос, я делаю тему под вордпресс и использовал материал с этой страницы, но мне хотелось, чтобы сообщения выводимые в случае успеха или провала были разные, как я могу это сделать?
    У меня есть два готовых класса class=»alert alert-danger» class=»alert alert-success», как мне применить их к мессаджу в functions.php. И хотелось бы прикрутить какую нибудь анимацию вместо текста «Проверяются данные, секундочку…».

  25. Дмитрий

    Всем привет! Подскажите под какой строчкой в header.php вставить код формы?

  26. JAH

    Дмитрий, 🙂 где-то в <body>
    а точнее там где Вы хотите видеть форму… еще можно листинг кода привести (header.php) тока начиная с body

  27. Олег

    Не работает как надо. Послое залогинивания форма входа никудане исчезает. Только если перегрузить страницу появляются пользовательские ссылки и аватар.

  28. JAH

    Олег, работает нормально, тестил и локально и на некоторых проектах. На своем блоге отказался из-за защиты хостинга — была такая же штука как у Вас залогинивание происходило после «ручного» обновления страницы

  29. deller

    JAH, привет, не подскажешь как сделать восстановление пароля в таком же стиле.
    Пытаюсь сделать его в всплывающем окне. Чтобы на почту сразу пришел новый пароль пользователя

  30. deller

    Все, не надо, уже сделал, работает отлично!))

  31. Олег

    deller, а нам рассказать!

  32. deller

    тут весь код выложить?

  33. Олег

    Можно здесь, можно на jsfiddle.net

  34. deller

    это в function.php

    function ajax_lostPassword() {

    check_ajax_referer( ‘ajax-form-nonce’, ‘security3’ );

    $lost_pass = $_POST[‘lost_pass’];

    if ( $lost_pass == null ){
    echo json_encode(array(‘reset’=>false, ‘message’=>__(‘Пожалуйста заполните поле.’)));
    }
    else{
    if ( is_email( $lost_pass ) ) {
    $username = sanitize_email( $lost_pass );
    } else {
    $username = sanitize_user( $lost_pass );
    }

    $user_forgotten = ajax_lostPassword_retrieve( $username );

    if ( is_wp_error( $user_forgotten ) ) {

    $lostpass_error_messages = $user_forgotten->errors;
    foreach($lostpass_error_messages as $error){
    $display_errors .= ».$error[0].»;
    }

    echo json_encode( array(
    ‘reset’ => false,
    ‘message’ => $display_errors,
    ) );
    } else {
    echo json_encode( array(
    ‘reset’ => true,
    ‘message’ => ‘Сгенерирован новый пароль. Пароль отправлен на Ваш e-mail адрес.’,
    ) );
    }
    }

    die();
    }

    function ajax_lostPassword_retrieve( $user_data ) {

    global $wpdb, $current_site, $wp_hasher;

    $errors = new WP_Error();

    if ( empty( $user_data ) ) {
    $errors->add( ’empty_username’, ‘Пожалуйста укажите логин или пароль.’ );
    } else if ( strpos( $user_data, ‘@’ ) ) {
    $user_data = get_user_by( ’email’, trim( $user_data ) );
    if ( empty( $user_data ) )
    $errors->add( ‘invalid_email’, __( ‘Ни один пользователь не зарегестрирован под этим e-mail адресом.’) );
    } else {
    $login = trim( $user_data );
    $user_data = get_user_by( ‘login’, $login );
    }

    if ( $errors->get_error_code() )
    return $errors;

    if ( ! $user_data ) {
    $errors->add( ‘invalidcombo’, __( ‘Неверный логин или e-mail адрес.’) );
    return $errors;
    }

    $user_login = $user_data->user_login;
    $user_email = $user_data->user_email;

    do_action( ‘retrieve_password’, $user_login );

    $allow = apply_filters( ‘allow_password_reset’, true, $user_data->ID );

    if ( ! $allow )
    return new WP_Error( ‘no_password_reset’, __( ‘Пароль не сброшен для этого пользователя’ ) );
    else if ( is_wp_error( $allow ) )
    return $allow;

    $key = wp_generate_password( 20, false );
    do_action( ‘retrieve_password_key’, $user_login, $key );
    if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . ‘wp-includes/class-phpass.php’;
    $wp_hasher = new PasswordHash( 8, true );
    }

    $newpass_gen = wp_generate_password( 6, false );

    $newpass = wp_hash_password($newpass_gen);

    //$hashed = $wp_hasher->HashPassword( $key );
    //$wpdb->update( $wpdb->users, array( ‘user_activation_key’ => $hashed ), array( ‘user_login’ => $user_login ) );
    $wpdb->update( $wpdb->users, array( ‘user_pass’ => $newpass ), array( ‘user_login’ => $user_login ) );

    $message = __( ‘Кто-то запросил новый пароль для аккаунта с сайта:’ ) . «\r\n\r\n»;
    $message .= network_home_url( ‘/’ ) . «\r\n\r\n»;
    $message .= sprintf( __( ‘Username: %s’ ), $user_login ) . «\r\n\r\n»;
    $message .= __( ‘Если произошла ошибка, просто проигнорируйте это письмо, и ничего не произойдёт.’ ) . «\r\n\r\n»;
    $message .= __( ‘Новый сгенерированный пароль: ‘ . $newpass_gen ) . «\r\n\r\n»;

    if ( is_multisite() ) {
    $blogname = $GLOBALS[‘current_site’]->site_name;
    } else {
    $blogname = wp_specialchars_decode( get_option( ‘blogname’ ), ENT_QUOTES );
    }

    $title = sprintf( __( ‘[%s] Сброс пароля’ ), $blogname );
    $title = apply_filters( ‘retrieve_password_title’, $title );
    $message = apply_filters( ‘retrieve_password_message’, $message, $key );

    if ( $message && ! wp_mail( $user_email, $title, $message ) ) {
    $errors->add( ‘noemail’, __( ‘The e-mail could not be sent.Possible reason: your host may have disabled the mail() function.’, ‘alimir’ ) );

    return $errors;

    wp_die();
    }

    return true;
    }

  35. deller

    это в ajax-resetpass-script.js

    jQuery(document).ready(function($) {

    $(‘#lostpassrecovery #lostpasswordform’).on(‘submit’, function(e){
    $.ajax({
    type: ‘POST’,
    dataType: ‘json’,
    url: ajax_recpass_object.ajaxurl,
    data: {
    ‘action’ : ‘ajaxlostpass’,
    ‘lost_pass’ : $(‘form#lostpasswordform #lost_pass’).val(),
    ‘security3’ : $(‘form#lostpasswordform #security3’).val()
    },
    beforeSend:function(){
    },
    success: function(data){

    console.log(data.message);

    if(data.reset == true) {
    gonote(‘success’);
    } else {
    gonote(‘error’);
    }

    function gonote(type) {
    n = noty({
    text : data.message,
    type : type,
    dismissQueue: true,
    layout : ‘topRight’
    });
    return n;
    }
    }
    });
    e.preventDefault();
    });

    });

  36. deller

    Вроде так, извиняюсь что без оформления, теги ставил, не сработали.

  37. Олег

    пасиб, вечерком поковыряю

  38. Олег

    Deller, не работает

    Вы чего-то недописали

    Даже если добавлять в functions

    function ajax_resetpass_init(){
    /* Подключаем скрипт для авторизации */
    wp_register_script(‘ajax-resetpass-script’, ‘//localhost/s.coolidea.ru/js/ajax-resetpass-script.js’, array(‘jquery’) );
    wp_enqueue_script(‘ajax-resetpass-script’);

    /* Локализуем параметры скрипта */
    wp_localize_script( ‘ajax-resetpass-script’, ‘ajax_recpass_object’, array(
    ‘ajaxurl’ => admin_url( ‘admin-ajax.php’ ),
    ‘redirecturl’ => $_SERVER[‘REQUEST_URI’],
    ‘loadingmessage’ => __(‘Проверяются данные, секундочку…’)
    ));

    // Разрешаем запускать функцию ajax_lostPassword() пользователям без привелегий
    add_action( ‘wp_ajax_nopriv_lostPassword’, ‘ajax_lostPassword’ );
    }

    // Выполняем сброс только если пользователь не вошел
    if (!is_user_logged_in()) {
    add_action(‘init’, ‘ajax_resetpass_init’);
    }

    все равно потом в консоли
    Uncaught ReferenceError: noty is not defined ajax-resetpass-script.js?ver=3.9.1:85
    gonote ajax-resetpass-script.js?ver=3.9.1:85
    $.ajax.success ajax-resetpass-script.js?ver=3.9.1:82
    j jquery.min.js:2
    k.fireWith jquery.min.js:2
    x jquery.min.js:4
    b

  39. deller

    Все работает, noty это плагин другой для вывода сообщений, уберите его и все. console.log() например напишите чтобы смотреть что отвечает функция

  40. campusboy

    Классно, спасибо! Как считаешь, этот код такой же относительно безопасный, как и обычный вход у WP? И, кстати, чего себе не поставил? 🙂

  41. JAH

    campusboy, да нормально безопасный) себе поставил, а хостинг устроил защиту при входе в админку и облом короче не работало.. на дргуих проектах работает.)

  42. Евгений

    admin-ajax.php отвечает «-1» Хоть верно хоть не верно ввожу данные.
    Что может быть?

  43. adrin

    Нужно еще замутить регистрацию по такому же принципу, а то это как-то не полноценно. Одно без другого все равно не используется.

  44. MichaelEa

    Здравствуйте. Хотелось бы на главной странице сайта сделать большую и удобную форму авторизации, но на других страницах оставить её прежней. ..скажите, пожалуйста, как создать дополнительную форму авторизации?

  45. JAH

    MichaelEa, все очень просто, новой форме добавьте другой класс и оформляйте ее через css ее по своему вкусу

  46. petrozavodsky

    А что к init

    add_action(‘init’, ‘ajax_login_init’);

    есть же такие конструкции:
    add_action(‘wp_ajax_{action}’, ‘callback’);
    add_action(‘wp_ajax_nopriv_{action}’, ‘callback’);

    А если я вдруг включу кеш то что ? авторизация отвалитца

  47. Виктор

    Хочу сказать вам спасибо за ваше старание. Поставил себе форму авторизации и она работает отлично. Только правда пришлось файл стиля расковырять, ну не че вы же предупреждали что это с вашего сайта. Еще раз спасибо.

  48. Виктор

    Большое спасибо за код. Не мог доселе найти ничего токового 🙂

  49. Georgie Lorens

    Thanks for sharing excellent informations. Your website is so cool. I’m impressed by the details that you’ve on this website. It reveals how nicely you perceive this subject. Bookmarked this web page, will come back for more articles. You, my friend, ROCK! I found just the information I already searched everywhere and simply couldn’t come across. What a perfect web site.

  50. Дмитрий

    Народ, кто-нибудь смог сделать тоже самое для случая Забыли пароль и Регистрация?
    А то ж как-то не очень получается, когда остались окна WP для регистрации и восстановления пароля.

    Решение от deller для восстановления пароля не срабатывает, WP так и остался на экране.