Adminで特定のユーザーmetaが変更されたときを追跡してから、アクションを実行します。 ( https://codex.wordpress.org/Plugin_API/Action_Reference/profile_update から)正しいフックを見つけたと思いましたが、このコードを使用すると次のようになります。
add_action( 'profile_update', 'my_profile_update', 10, 2 );
function my_profile_update( $user_id, $old_user_data ) {
error_log(print_r($old_user_data,true));
}
私のエラーログには、変更しているユーザーメタは表示されず、メインのwp_usersテーブルの値と一連の機能のみが表示されます。プロファイルが管理者に保存されたときに、以前に変更されたuser_meta値を取得する(または変更されたuser_meta値を検出する)にはどうすればよいですか?
私は答えを考え出した。私はアクションフックではなくinsert_user_meta
フィルタを使う必要がありました。そして、私はまた、(古いデータを取得するための)get_user_meta
と変更される値を取得するための$_POST
のコンボも必要でした。まとめると、特定のuser_meta
フィールド(私の場合はACFで作成されたもの)がある値から別の値に変化したときに確認する最後のコードがあります。
add_filter( 'insert_user_meta', function( $meta, $user, $update ) {
if( true !== $update ) return $meta; // if not an update (b/c it is a create) do nothing
if(is_admin()) { // check if we are in admin not front end
$old_meta = get_user_meta( $user->ID );
if( $old_meta['verified_member'][0] !== $_POST['acf']['field_5ad4eecd7564b'] ) {
error_log("verified_member was modified from " . $old_meta['verified_member'][0] . " to " . $_POST['acf']['field_5ad4eecd7564b']);
}}
return $meta;
}, 10, 3 );