web-dev-qa-db-fra.com

Détecter le changement dans user_meta et récupérer les anciennes et les nouvelles valeurs

Je veux suivre quand un certain morceau de méta d'utilisateur est changé dans l'admin, puis effectuer une action. Je pensais avoir trouvé le bon raccord (de https://codex.wordpress.org/Plugin_API/Action_Reference/profile_update ), mais lorsque j'utilise ce code:

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));
}

Mon journal des erreurs ne montre pas les méta utilisateur que je modifie, mais uniquement les valeurs de la table wp_users principale et un ensemble de fonctionnalités. Comment puis-je récupérer la valeur user_meta précédemment modifiée (ou détecter une valeur utilisateur_meta modifiée) lorsqu'un profil est enregistré dans l'administrateur?

1
Stephen

J'ai compris la réponse. J'avais besoin d'utiliser le filtre insert_user_meta, pas un crochet d'action. Et puis j’ai AUSSI eu besoin d’une combinaison de get_user_meta (pour récupérer les anciennes données) et de $_POST pour obtenir la valeur modifiée. En résumé, voici mon dernier code pour déterminer le moment où un champ user_meta (créé dans ACF) change d'une valeur à une autre:

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