Я разрабатываю плагин, который будет управлять входом пользователя.
В моей пользовательской форме входа в систему, когда представляются учетные данные, я запускаю этот код:
if( isset( $_POST['login'] ) ){
$login = wp_signon( array(
'user_login' => $_POST['username'],
'user_password' => $_POST['password'],
'remember' => 'true'
), true);
if( is_wp_error( $login ) ){
echo $login->get_error_message();
} else {
$username = $_POST['username'];
wp_set_current_user( $login->ID, $_POST['username'] );
wp_set_auth_cookie( $login->ID );
do_action( 'wp_login', $username );
}//else
}//if
if( is_user_logged_in() ){ // is_user_logged_in()
?><a id="wp-submit" href="<?php echo esc_url( add_query_arg( array( 'ecofriends_logout' => true) ) ); ?>" title="Logout">Logout</a><?php
} else {
ecofriends_login_form();
}//else
Поэтому, когда учетные данные отправлены, он входит в систему.
Если учетные данные не представлены, проверьте, вошел ли пользователь в систему, чтобы показать ссылку выхода из системы, а также форму входа.
Важным фактом является то, что здесь is_user_logged_in () работает нормально.
В файле function.php я создал функцию, которая управляет выходом из системы:
function logout(){
if( is_user_logged_in() ){
wp_logout();
}//if
}//ecofriends_logout
но когда я вызываю его, is_user_logged_in () всегда возвращает false, даже если пользователь только что вошел в систему.
Постскриптум Я работаю над localhost, и форма входа вызывается на странице с помощью шорткода.
Спасибо
Хорошо, из комментариев я думаю, что это то, что происходит. Ваш плагин login.php
file вызывается при каждом запросе, который, как вы сказали, вызывает функцию logout (), поэтому каждый раз выходит из системы.
Вы должны ссылаться на logout()
Функция запускаемых пользователем действий, таких как нажатие на кнопку выхода из системы или определенные условия, которые вы навязываете.
Других решений пока нет …