我正在尝试通过用户配置文件编辑或管理员用户编辑将用户更新字段推送到api。
我已经成功地允许用户更新自己的配置文件,并让它使用相同的(新的)更新数据更新远程api。
我在让管理端正常工作方面没有那么成功。
if ( is_admin () ) {
add_action ( \'profile_update\', \'myplugin_admin_update\', 10, 2 );
//add_action ( \'edit_user_profile_update\', \'myplugin_admin_update\', 10, 2 );
// ^ Fires before form submit. Don\'t think I can use it.
...
}
function myplugin_admin_update ($user_id, $old_user_data) {
$user_meta = array_map( function( $a ){ return $a[0]; }, get_user_meta( $user_id ) );
...
}
然后我基本上会将这个元发送到另一个例程进行处理和发送。那部分很好用。
问题是数据是“旧的”。奇怪的是,数据I pull from DB 使用hook profile\\u更新不是提交的/新数据,而是旧数据-与api codex中的描述相反。我知道钩子提供了$old\\u数据,但我对此不感兴趣-就在它启动时。我只需要一个钩子,在管理员更新用户后立即启动。之前没有。我需要新提交的数据。
profile\\u update此挂钩允许您在用户的数据库信息更新后立即访问用户的数据
我做错了什么?我得到“旧数据”when i query DB 在这个钩子上。
编辑:
事实证明,我只是在测试某些元字段。我更新了“名字”,这是发布到API的新值。其他字段显示如上所述发送到api的旧数据。
我在最初的帖子中没有提到这些元字段作为旧数据读取\'WP Member\' plugin fields (通过插件添加)。不过,它们仍然存储在数据库的usermeta中。
如果我在用户上单击“更新”两次,我就可以用新值更新所有API,但这似乎是一个薄弱的解决方法。
所以,现在的问题是:为什么只有一些元值被解读为新值?
最合适的回答,由SO网友:butlerblog 整理而成
我怀疑问题在于profile_update
行动
您使用的是优先级10,这也是默认优先级。WP Members插件使用相同的钩子更新自定义用户元字段,也以默认优先级进行更新。因此,插件的更新很可能会发生after 您的流程。(这可能就是为什么您在两次点击更新时看到“新”数据的原因。“新”数据此时不再是新的,而是为这些字段保存的数据。)
如果您更改了优先级,以便稍后执行操作,您应该看到它正在更新(前提是您的其余功能没有问题)。将其设置为11或更高,以便在WP成员更新数据后使用:
add_action ( \'profile_update\', \'myplugin_admin_update\', 11, 2 );