在定制构建插件中获取用户数据

时间:2014-02-16 作者:user759235

因此,我正在开发一个自定义插件,它将获得设置角色的选项&;每个用户启用/禁用插件内某些页面/部分的功能。因此,我希望通过使用get_userdata()但这是一个错误Call to undefined function get_userdata(), 我已经看到这是一个常见的问题,但我还没有找到任何解决方案。

那么如何在插件中获取用户数据呢?

1 个回复
SO网友:gmazzap

有两个原因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

});
也许这是最好的解决方案。

结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/