如果请求在输入时未经过身份验证init
如果愿意,可以运行身份验证逻辑。
如果您想留意其他插件,可以运行init
优先权为0
例如(或负值)。
插件(可能)钩住init
以默认优先级或高于默认优先级的优先级和/或其他挂钩。
你不会抓住所有的边缘案例。
记住,设置wp_set_auth_cookie
光靠自己可能还不够。
另一种选择是plugins_loaded
.
这个(plugins_loaded
) 是该方法is_user_logged_in
变为可用。
内部is_user_logged_in
如下所示:
function is_user_logged_in() {
$user = wp_get_current_user();
return $user->exists();
}
我解释了
wp_get_current_user
以下内容:
全局用户对象global $current_user
在之前首次填充init
.
特别是在wp-settings.php
:
/**
* Fires after the theme is loaded.
*
* @since 3.0.0
*/
do_action( \'after_setup_theme\' );
// Set up current user.
$GLOBALS[\'wp\']->init();
/**
* Fires after WordPress has finished loading but before any headers are sent.
*
* Most of WP is loaded at this stage, and the user is authenticated. WP continues
* to load on the {@see \'init\'} hook that follows (e.g. widgets), and many plugins instantiate
* themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
*
* If you wish to plug an action once WP is loaded, use the {@see \'wp_loaded\'} hook below.
*
* @since 1.5.0
*/
do_action( \'init\' );
$GLOBALS[\'wp\']->init();
呼叫WP::init
哪个呼叫wp_get_current_user
哪个呼叫_wp_get_current_user
._wp_get_current_user
填充global $current_user
._wp_get_current_user
启动过滤器determine_current_user
.
function _wp_get_current_user() {
// ... shortened for brevity
$user_id = apply_filters( \'determine_current_user\', false );
if ( ! $user_id ) {
wp_set_current_user( 0 );
return $current_user;
}
wp_set_current_user( $user_id );
return $current_user;
}
有两个默认(核心)回调连接到
determine_current_user
:
add_filter( \'determine_current_user\', \'wp_validate_auth_cookie\' );
add_filter( \'determine_current_user\', \'wp_validate_logged_in_cookie\', 20 );
这基本上就是验证用户身份验证有效性的方法,如果有效,
determine_current_user
将返回最终传递给的相应用户ID
wp_set_current_user( $user_id )
.
因此,你最好还是plugins_loaded
:
function wpse_356655_custom_auth_callback() {
// ... shortened for brevity
$user_to_login = \'...\';
wp_set_auth_cookie( $user_to_login->ID, true );
// if you want is_user_logged_in to work you should set `wp_set_current_user` explicityly
wp_set_current_user( $user_to_login->ID );
do_action(\'wp_login\', $user_to_login->name, $user_to_login );
}
add_action( \'plugins_loaded\', \'wpse_356655_custom_auth_callback\' );
您还可以进一步了解
wp_signon
核心功能,也可能适合您的需要。
我不能说这是最好的办法,但它是可行的。
function wpse_356655_custom_auth_callback() {
// ... shortened for brevity
$user_to_login = \'...\';
wp_set_auth_cookie( $user_to_login->ID, true );
// if you want is_user_logged_in to work you should set `wp_set_current_user` explicityly
wp_set_current_user( $user_to_login->ID );
// from within this callback, hook on to `init`
add_action(\'init\', function() use($user_to_login) {
do_action(\'wp_login\', $user_to_login->name, $user_to_login );
});
}
add_action( \'plugins_loaded\', \'wpse_356655_custom_auth_callback\' );