Ограничить доступ к wp-login.php

У меня есть жестко закодированная форма входа / регистрации / потерянного пароля на боковой панели моей темы. Я использую скрытый ввод для «redirect_to», который работает нормально. Но когда я нажимаю кнопку входа, не вводя ничего или конкретно, когда возникает ошибка, она перенаправляется на страницу wp-login.php.

Я не хочу, чтобы это произошло. Если возникает ошибка, она должна отображаться в текущем месте. Как я могу это сделать.

Примечание. То же самое необходимо для функции выхода из системы. В принципе, я не хочу показывать страницу wp-login.php любой ценой кому угодно.

Действие wp_login_failed срабатывает, когда произошел сбой входа из-за неправильной комбинации имени пользователя и пароля. Так что это хорошее место для начала. Это очень простой пример, который просто перенаправляется на главную страницу.

 <?php add_action( 'wp_login_failed', 'wpse25628_login_failed', 10, 1 ); /** * Catches all failed logins and redirect them to the * websites home page. */ function wpse25628_login_failed( $username ) { /* May want to do something here to give the user feedback for instance call `global $user;`, which will be a wp_error object, you could append the code as a $_GET variable and adjust your front end according to the error message */ wp_redirect( home_url(), 302 ); exit(); } 

И, конечно же, есть и wp_logout hook! Может быть, вы отправляете людям страницу благодарности вместо домашней страницы.

 <?php add_action( 'wp_logout', 'wpse25628_catch_logout' ); /** * When a user logs out, send them back to the home page */ function wpse25628_catch_logout() { wp_redirect( home_url(), 302 ); exit(); } 

К сожалению, хук wp_login_failed не срабатывает, если есть пустое имя пользователя или пароль. Также столь же неудачным является отсутствие крючков, которые срабатывают, когда это происходит. Вероятно, лучше проверить эту штуку на стороне клиента с помощью javascript. Вот краткий пример.

 jQuery(document).ready(function(){ jQuery('#loginform').submit(function(e){ var errors; jQuery('#loginform input').each(function(){ var val = jQuery(this).val() if( ! val ) { errors = true; } }); if( errors ) { e.preventDefault(); } }); }); 

Вы можете перенаправить с wp-login и других страниц по умолчанию следующим образом:

 add_action('plugins_loaded', 'myAction'); function wpSimpleUserSetup() { if (in_array($_SERVER['REQUEST_URI'], array('/wp-login.php', 'wp-login.php?action=register'))) { wp_redirect(wp_login_url()); exit; } } 

Кроме того, функция wp_login_url () подключается, поэтому вы можете ее переопределить сами:

 function myLoginUrl( $redirect = '', $force_reauth = false ) { return $custom_url; } add_filter( 'login_url', 'myLoginUrl', 9999 );