Dmitry Kohan
Ответы в темах
-
Функция
post_password_required()
проверяет пароль на ввод и соответствие пароля, но как отследить момент, что форма уже была отправлена, а введенный пароль не верен — никак не могу реализовать..Прошу прощения, может кто-нибудь знает, а как вывести сообщение в случае неправильного ввода пароля защищенного поста ? (т.е. когда форма уже отправлена, но пароль не верен).
Подскажите, пожалуйстаФорум: Плагины
Тема: Ограничить попытки ввода пароля в постахПлагин не нашел, решил проблему другим способом здесь
Спасибо огромное за помощь и советы, всё работает!
@igor-san , спасибо огромное. У меня получилось реализовать только наполовину — через транзитные опции и направлять пользователя на страницу предшествующую посту с паролем. Ваш вариант рабочий на 100% и в разы проще ! если вдруг будет интересно — опубликую, хотя этот мой код уже неуместен после Вашей публикации
add_action('template_redirect', 'post_password_result'); function post_password_result() { if( ! is_user_logged_in() && is_singular('post') && post_password_required() ) { if( $return_url = wp_get_referer() ){ // Запись в транзитный кэш на 1 час set_transient( 'post_password_referer', $return_url, 1 * HOUR_IN_SECONDS ); } wp_redirect( home_url('/wp-login.php') ); exit; } } add_filter( 'login_redirect', 'my_login_redirect', 10, 3 ); function my_login_redirect( $redirect_to, $request, $user ) { if ( isset( $user->roles ) && is_array( $user->roles ) ) { if ( in_array( 'administrator', $user->roles ) ) { return $redirect_to; } else { $post_password_referer = get_transient( 'post_password_referer' ); if ( $post_password_referer !== false ) return $post_password_referer; else return home_url(); } } else { return $redirect_to; } }
Решил пока остановиться на этом варианте — если пользователь не авторизован и пост защищен паролем, перенаправлять пользователя на страницу авторизации:
add_action('template_redirect', 'post_password_result'); function post_password_result() { if( ! is_user_logged_in() && is_singular('post') && post_password_required() ) { wp_redirect( home_url('/wp-login.php') ); exit; } }
Но вот вопрос, а как направить пользователя после успешного входа не в админку, а на страницу поста с паролем, с которого он пришел на wp-login.php ?
если только делать привязку к кукам или АйПи .
т.е. если делать привязку к IP, то получается примерно следующий алгоритм:
пользователь ввел пароль, сохраняю нового пользователя если такового нет с логином IP, пароль рандомный — с помощьюwp_create_user()
, затем сохраняю в метаданные количество попыток и время попытки ввода пароля, и затем при след попытке проверяю количество попыток — и если количество попыток меньше разрешенного — форма отправляется; если же попытки превышают лимит, то мониторю время следующей попытки с временем из БД — если временной промежуток истек, удаляю количество попыток из БД и ввод пароля снова будет разрешен.
Примерно правильно ? (буду пробовать)Но как решить начальный вопрос с количеством попыток ввода пароля, если пользователь не авторизован и нет возможности регистрации ?
Проблему, описанную мной в последнем сообщении, решил добавлением условия
is_singular('post')
Появилась идея сделать следующее — если пользователь не авторизован и пост защищен паролем, перенаправлять пользователя на страницу авторизации
add_action('template_redirect', 'post_password_result'); function post_password_result() { if( ! is_user_logged_in() && post_password_required() ) { wp_redirect( home_url('/wp-login.php') ); exit; } }
Но редирект срабатывает всегда, не получается добиться, чтобы
post_password_required()
работала должным образом. Не подскажете, где я ошибся в коде выше ?@sergeybiryukov , спасибо большое.
Но как быть если пользователь не авторизован ?Спасибо за помощь
Пробовал предложенное Вами решение в различных вариациях — хук срабатывает, преобразование изображения происходит, но периодически — то изображение исходное грузится только со 2-3 раза, то вообще не загружается и ругается на нехватку ресурсов.
В результате решил установить плагин из-за нехватки времени.
В любом случае спасибо!Спасибо большое! Буду пробовать реализовать
Так существует такой хук ? Вы владеете информацией?
Свой костыльный лисапед всегда лучше плагина из каталога?
Мне не нужны чужие плагины с излишним функционалом. У меня есть простая функция и я задал конкретный вопрос про возможное существование соответствующего хука, к которому можно данную функцию прикрепить.