web-dev-qa-db-ja.com

User_metaへの変更を検出し、古い値と新しい値を取得します

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値を検出する)にはどうすればよいですか?

1
Stephen

私は答えを考え出した。私はアクションフックではなく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 );
1
Stephen