有两个原因get_userdata
失败,两者都与pluggable function.
可插拔函数可以被插件覆盖,因此如果插件覆盖该函数,并且插件编码错误,则该函数可能会失败。然而,这是not 使用该函数导致错误的最常见原因。
之所以会发生这种情况,往往是因为它被错误地使用了。
可插拔函数定义在pluggable.php
已加载的after 所有插件都已加载,否则插件无法覆盖其中的函数。
因此,如果在插件中使用该函数时没有将其包装到适当的挂钩中,则函数未定义,因此会出现错误。
您可以通过两种方式解决此问题:
1。将函数包装在适当的挂钩中
add_action(\'plugins_loaded\', function() {
// stuff here where you get user id
$user_data = get_userdata( $userid );
// stuff here
});
你可以使用的第一个钩子是
\'plugins_loaded\'
但如果你愿意
to get info of current logged in user you should use \'wp_loaded\'
hook.
2。不使用可插拔功能什么get_userdata
do,只是返回WP_User
具有作为参数传递的id。因此,如果您可以使用:
// stuff here where you get user id
$user_data = FALSE;
$data = WP_User::get_data_by( \'id\', $userid );
if ( ! empty($data) ) {
$user = new WP_User;
$user_data = $user->init( $data );
}
这与
$user_data = get_userdata( $userid );
.这段代码不用在钩子中包装就可以工作,因为
WP_User
类在中定义
\'wp-includes/capabilites.php\'
很早加载的文件。
然而,在插件中编写代码并将其包装在可预测的挂钩中被认为是一种很好的做法,所以第一种解决方案更好。
如果需要,可以使用这两种解决方案中的最佳方案,使用适当的挂钩,避免使用可被其他插件覆盖的可插入功能:
add_action(\'wp_loaded\', function() {
// stuff here where you get user id
$user_data = FALSE;
$data = WP_User::get_data_by( \'id\', $userid );
if ( ! empty($data) ) {
$user = new WP_User;
$user_data = $user->init( $data );
}
// stuff here
});
也许这是最好的解决方案。