@ 2019-10-01T12:27:47Z <?php
add_shortcode( 'form_custom_login', 'form_render_login' );
function form_render_login() {
// проверяем, если пользователь уже авторизован, то выводим соответствующее сообщение и ссылку "Выйти"
if ( is_user_logged_in() ) {
return sprintf( "Вы уже авторизованы на сайте. <a href='%s'>Выйти</a>.", wp_logout_url() );
}
// присваиваем содержимое формы переменной и затем возвращаем её, выводить через echo() мы не можем, так как это шорткод
$return = '<div class="login-form-container-page"><h2>Войти на сайт</h2>';
// если возникли какие-либо ошибки, отображаем их
if ( isset( $_REQUEST['errno'] ) ) {
$error_codes = explode( ',', $_REQUEST['errno'] );
foreach ( $error_codes as $error_code ) {
switch ( $error_code ) {
case 'empty_username':
$return .= '<p class="errno">Вы не забыли указать свой email/имя пользователя?</p>';
break;
case 'empty_password':
$return .= '<p class="errno">Пожалуйста, введите пароль.</p>';
break;
case 'invalid_username':
$return .= '<p class="errno">На сайте не найдено указанного пользователя.</p>';
break;
case 'incorrect_password':
$return .= sprintf( "<p class='errno'>Неверный пароль. <a href='%s'>Забыли</a>?</p>", wp_lostpassword_url() );
break;
case 'confirm':
$return .= '<p class="errno success">Инструкции по сбросу пароля отправлены на ваш email.</p>';
break;
case 'changed':
$return .= '<p class="errno success">Пароль успешно изменён.</p>';
break;
case 'expiredkey':
case 'invalidkey':
$return .= '<p class="errno">Недействительный ключ.</p>';
break;
}
}
}
// используем wp_login_form() для вывода формы (но можете сделать это и на чистом HTML)
$args = array(
'echo' => false,
'redirect' => site_url($_SERVER['REQUEST_URI']), //перенаправление на ту же страницу
'form_id' => 'loginform',
'label_username' => __('Имя пользователя'),
'label_password' => __('Пароль'),
'label_remember' => __('Запомнить меня'),
'label_log_in' => __('Войти'),
'id_username' => 'user_login',
'id_password' => 'user_pass',
'id_remember' => 'rememberme',
'id_submit' => 'wp-submit',
'remember' => true,
'value_username' => NULL,
'value_remember' => true
);
$form = str_replace('wp-login.php', 'wp-login.php?pass=1', wp_login_form($args));
$return .= $form;
$return .= '<a class="forgot-password-page" href="' . wp_lostpassword_url() . '">Забыли пароль</a></div>';
// и наконец возвращаем всё, что получилось
return $return;
}
/*
* Редиректы обратно на кастомную форму входа в случае ошибки
*/
add_filter( 'authenticate', 'pageform_redirect_at_authenticate', 101, 3 );
function pageform_redirect_at_authenticate( $user, $username, $password ) {
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( is_wp_error( $user ) ) {
$error_codes = join( ',', $user->get_error_codes() );
$login_url = home_url( '/page-login/' );
$login_url = add_query_arg( 'errno', $error_codes, $login_url );
wp_redirect( $login_url );
exit;
}
}
return $user;
}
/*
* Редиректы после выхода с сайта
*/
add_action( 'wp_logout', 'pageform_logout_redirect', 5 );
function pageform_logout_redirect(){
wp_safe_redirect( site_url( '/page-login/?logged_out=true' ) );
exit;
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.1.25 - 7.1.32 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.4 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 Fatal error: Uncaught Error: Call to undefined function add_shortcode() in /in/bf6Ji:3
Stack trace:
#0 {main}
thrown in /in/bf6Ji on line 3
Process exited with code 255 . Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Fatal error: Uncaught Error: Call to undefined function add_shortcode() in /in/bf6Ji:3
Stack trace:
#0 {main}
thrown in /in/bf6Ji on line 3
Process exited with code 255 . preferences:dark mode live preview
149.65 ms | 401 KiB | 174 Q