[ create a new paste ] login | about

Link: http://codepad.org/ZOzncX2O    [ raw code | output | fork ]

PHP, pasted on Aug 15:
<?php
/*
Plugin Name: Шорткод формы регистрации +++
Text Domain: personalize-login
*/

/*
 * Добавляем шорткод, его можно использовать в содержимом любой статьи или страницы, вставив [pageform_custom_login]
 */
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_page',
        '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;
}


Output:
1
2

Fatal error: Call to undefined function add_shortcode() on line 10


Create a new paste based on this one


Comments: