? login = не удалось подключиться только к URL при определенных обстоятельствах

Я использую этот фрагмент для перенаправления неудачных входов на мою пользовательскую страницу …

add_action( 'wp_login_failed', 'my_front_end_login_fail' ); // hook failed login function my_front_end_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? // if there's a valid referrer, and it's not the default log-in screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { $pos = strpos($referrer, '?login=failed'); if($pos === false) { // add the failed wp_redirect( $referrer . '?login=failed' ); // let's append some information (login=failed) to the URL for the theme to use } else { // already has the failed don't appened it again wp_redirect( $referrer ); // already appeneded redirect back } exit; } } 

Это работает блестяще, но только если пользователи фактически не выполняют вход в систему, т.е. они вводят неправильное имя пользователя или пароль.

Если пользователь выполняет любое из следующих действий, то это не работает.

  • Не вводит имя пользователя
  • Не вводит пароль
  • Ничего не вводит ни в одном из полей

Возвращаемый URL не имеет? Login = failed attatched to it, который, я думаю, является причиной того, что фрагмент не поймает его. Какие-нибудь идеи?

Solutions Collecting From Web of "? login = не удалось подключиться только к URL при определенных обстоятельствах"

Удалось решить эту проблему с помощью следующего кода: http://css.dzone.com/articles/create-your-own-wordpress

 add_action( 'authenticate', 'pu_blank_login'); function pu_blank_login( $user ){ // check what page the login attempt is coming from $referrer = $_SERVER['HTTP_REFERER']; $error = false; if($user == null || $_POST['pwd'] == '') { $error = true; } // check that were not on the default login page if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') && $error ) { // make sure we don't already have a failed login attempt if ( !strstr($referrer, '?login=failed') ) { // Redirect to the login page and append a querystring of login failed wp_redirect( $referrer . '?login=failed_empty' ); } else { wp_redirect( $referrer ); } exit; } } 

Это отлично работает в сочетании с моим первоначально размещенным кодом и охватывает как неудачные попытки входа в систему, так и неудачные попытки входа в систему, когда поля пароля и имени пользователя пусты

РЕДАКТИРОВАТЬ

На самом деле лом, что, отрезанные работы, но, кажется, мешает мне войти в систему успешно, wierd ………..

@ fightstarr20 получил это, но, как указано, код не позволяет вам войти в систему.

Ссылка на код была обновлена ​​на исходной странице (а не на одной ссылке).

В частности, if ($ user == null … должен быть $ _POST ['log'} == '' …..

Вот код. Ссылка источника

  add_action( 'authenticate', 'pu_blank_login'); function pu_blank_login( $user ){ // check what page the login attempt is coming from $referrer = $_SERVER['HTTP_REFERER']; $error = false; if($_POST['log'] == '' || $_POST['pwd'] == '') { $error = true; } // check that were not on the default login page if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') && $error ) { // make sure we don't already have a failed login attempt if ( !strstr($referrer, '?login=failed') ) { // Redirect to the login page and append a querystring of login failed wp_redirect( $referrer . '?login=failed' ); } else { wp_redirect( $referrer ); } exit; } } 
 add_action( 'wp_authenticate', 'my_front_end_login_fail', 1, 2 ); function my_front_end_login_fail( $user, $pwd ) { } 

Вы заметили, что hook wp_authenticate принимает два аргумента? И знаете ли вы, что вам нужно передать количество аргументов с вызовом add_action() ?

Время от времени вы должны посмотреть основные файлы:

  $ignore_codes = array('empty_username', 'empty_password'); if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) { do_action('wp_login_failed', $username); } 

Крючок wp_login_failed выполняется только тогда, когда имя пользователя или пароль пользователя не пуст.

Так. Давайте начнем с самого начала и очистим некоторые вещи:

 add_action( 'wp_authenticate', 'my_front_end_login_fail', 1, 2 ); add_action( 'wp_login_failed', 'my_front_end_login_fail', 1, 1 ); function my_front_end_login_fail( $user, $pwd = '' ) { // reasons to stop here // $user is not empty // $user is not a wp-error object // $pwd is not empty if ( ! empty( $user ) && ! empty( $pwd ) && ! is_wp_error( $user ) ) return false; // if a referer is set, use it. else setup the standard login file $referrer = ( isset( $_SERVER['HTTP_REFERER'] ) && ! empty( $_SERVER['HTTP_REFERER'] ) ) ? $_SERVER['HTTP_REFERER'] : home_url( 'wp-login.php' ); // take the safe one, use home_url() /* * since PHP5 we can parse an url * @see http://php.net/manual/en/function.parse-url.php * * parse_url( 'http://www.example.com/wp-login.php?login=failed&foo=bar' ) gives us something like that: * * array ( * 'scheme' => 'http' * 'host' => 'www.example.com' * 'path' => '/wp-login.php' * 'query' => 'login=failed&foo=bar' * ) */ $parsed_url = parse_url( $referrer ); /* * Another fine function is parse_str() * @see: http://php.net/manual/en/function.parse-str.php * * parse( 'login=failed&foo=bar', $query ); results in * array( * 'login' => 'failed' * 'foo' => 'bar' * ) * */ parse_str( $parsed_url['query'], $query ); // if there's a valid referrer, and it's not the default log-in screen if ( ! strstr( $parsed_url['path'], 'wp-login' ) && ! strstr( $parsed_url['path'], 'wp-admin' ) ) { // already has the failed don't appened it again $redirect_to = $referrer; if( ! isset( $query['login'] ) || 'failed' !== $query['login'] ) { // add the failed // but never ever use a simple string concaternation // what will result if the referer is 'example.com?foo=bar'? // it will result in 'example.com?foo=bar?login=failed' OUTCH! $redirect_to = add_query_arg( array( 'login' => 'failed_empty' ), $referrer ); } // you don't want to redirect to google or somewhere else, you want to redirect to your // own domain. so use wp_safe_redirect() wp_safe_redirect( $redirect_to ); exit; } } 

Это немного сложно. Мы подключаем эту функцию к двум различным действиям. Первое действие проходит два аргумента, второе – одно . Наш обратный вызов всегда принимает два аргумента, но если только один передан, второй из них предопределен пустой строкой.

Остальная часть функции объясняется в комментариях.