从前端更新用户信息的简单示例

时间:2013-09-21 作者:Ari

我想让用户能够使用wp_update_user 和短代码。下面的代码正在运行。

      add_shortcode(\'user-profile\', \'get_current_user_prof\');

      function get_current_user_prof() {
      global $current_user;
      get_currentuserinfo();
            if(is_user_logged_in()) {
$tableuserinf = "<form method=\'post\' action=\'#\'><table><tbody>";
$tableuserinf .= "<tr><td>Nickname:</td><td><input type=\'text\' name=\'fepusernick\' value=\'". $current_user->nickname ."\'/></td></tr>";
$tableuserinf .= "</tbody></table><button>Submit</button></form>";

          $user_id = 1;
    $nicksname = $_POST[\'fepusernick\'];
    wp_update_user( array ( \'ID\' => $user_id, \'nickname\' => $nicksname ) ) ;
                return $tableuserinf;
}
          }
上面代码的唯一问题是它的字段显示了更新成功后数据库的前一个值。并且仅在刷新页面后检索数据库数据。这会让用户感到困惑。如何解决这个问题?

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

您的代码中至少有三个错误。第一在尝试更新用户信息之前,您正在“返回”,因此wp_update_user() 未执行函数。其次,您对用户ID进行了硬编码,因此您总是试图修改ID=1的用户的昵称

 return $tableuserinf;
 $user_id = 1;
 $nicksname = $_POST[\'fepusernick\'];
 wp_update_user( array ( \'ID\' => $user_id, \'nickname\' => $nicksname ) ) ;
应为:

$user_id = $current_user->ID;
$nicksname = $_POST[\'fepusernick\'];
wp_update_user( array ( \'ID\' => $user_id, \'nickname\' => $nicksname ) ) ;
return $tableuserinf;
您可以进一步进行一些检查:

$user_id = $current_user->ID;
// Not sure if sanitize_user() is needed or is executed by wp_update_user(). Anyway, it doesn\'t hurt
$nicksname = isset($_POST[\'fepusernick\']) ? sanitize_user($_POST[\'fepusernick\']) : \'\';
//check if new nickname is different before performing the update operation
if($nicksname != $current_user->nickname){
    wp_update_user( array ( \'ID\' => $user_id, \'nickname\' => $nicksname ) ) ;
}
return $tableuserinf;

结束

相关推荐

Client Profiles

正在寻找创建客户机数据库的最佳方法。插件能最好地实现以下功能吗?我的客户端数据库插件存储有关客户端的个人信息和统计信息,这些信息和统计信息将通过自定义字段和自定义表单收集,管理员创建客户端配置文件后,仪表板选项卡将打开列表区域(类似于用户选项卡)(仅限管理员)“添加新”功能(类似于仪表板的用户区域)。管理员可以将客户端分配给用户,分配给用户的客户端显示为用户元数据。分配给用户的客户端将在用户配置文件中可见,仪表板小部件显示为登录用户分配的客户端,并带有指向客户端配置文件页面的链接。插件是解决此问题的解决方