问题描述
截至大约 10 天前,WordPress 4.5 developers deprecated get_currentuserinfo()作为可插拔功能。不幸的是,我的插件使用自己的 get_currentuserinfo() 从外部数据库登录用户。
这将需要重写该插件的 WP 4.5 兼容性区域。
既然我不是唯一一个使用这个功能的桥梁,那么开发者应该采取什么方向呢?
最佳解决方案
答案在于 wp_get_current_user()
可插拔功能。我只是将函数名 get_currentuserinfo()
改为 wp_get_current_uesr()
,然后确保返回值不是布尔值,但返回 $ current_user 。
这似乎运作良好,包括缓存等。
希望这有助于别人。
if ( ! function_exists( 'wp_get_current_user' ) ) :
/**
* This replacement function will no longer work after WordPress 4.5
* The pluggable function was deprecated in WP 4.5
*
* @return void|boolean
*
* @since 2.5.1.03
* Added apply_filter to match WP get_currentuserinfo()
*
* @since 3.0.2.01
* wp_get_current_user instead of get_currentuserinfo()
*/
function wp_get_current_user() {
global $current_user;
if ( ! empty( $current_user ) ) {
if ( $current_user instanceof WP_User ) {
return $current_user;
}
// Upgrade stdClass to WP_User
if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
$cur_id = $current_user->ID;
$current_user = null;
wp_set_current_user( $cur_id );
return $current_user;
}
// $current_user has a junk value. Force to WP_User with ID 0.
$current_user = null;
wp_set_current_user( 0 );
return $current_user;
}
if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
wp_set_current_user( 0 );
return $current_user;
}
$visitor = XenWord::getVisitor();
$user_id = $visitor['user_id'];
// Conditional for no XenForo user is logged in
if ( $user_id == 0 ) {
$current_user = null;
wp_set_current_user( 0 );
return $current_user;
}
/**
* Filter the current user.
*
* The default filters use this to determine the current user from the
* request's cookies, if available.
*
* Returning a value of false will effectively short-circuit setting
* the current user.
*
* @since 3.9.0
*
* @param int|bool $user_id User ID if one has been determined, false otherwise.
*/
$user_id = apply_filters( 'determine_current_user', false );
if ( ! $user_id ) {
wp_set_current_user( 0 );
return $current_user;
}
$current_user = get_userdata( $user_id );
wp_set_current_user( $user_id );
wp_validate_auth_cookie($cookie = '', $scheme = '');
// Check to determine if adding XF users to WP database
XenWord_XF_Users::check_options();
return $current_user;
}
endif;
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。