3v4l.org

run code in 300+ PHP versions simultaneously
<?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; }
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:
149.65 ms | 401 KiB | 174 Q