Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save waqasraza123/471f2cf2d1e4c52da1ae48d22b33e316 to your computer and use it in GitHub Desktop.
Save waqasraza123/471f2cf2d1e4c52da1ae48d22b33e316 to your computer and use it in GitHub Desktop.
When you have ACF User fields like first name and last name and you need to keep that in sync with what is entered in WordPress user profile (works both ways)
//If both changed at the same time - custom field value will be applied as it fires later, set 30 to change it add_action( 'profile_update', array($this, 'update_acf_fields'), 30, 2 );
class Sync_ACF_with_User_Profile_Class {
static public $sync_pair = array(
array( 'acf' => 'member_name', 'profile_field' => 'first_name'), //add acf field name according to your setup
array( 'acf' => 'member_lastname', 'profile_field' => 'last_name')// add more rows to sync any other fields as well
);
public function __construct() {
add_action( 'profile_update', array($this, 'update_acf_fields'), 10, 2 ); //when profile is updated -> update ACF
add_action('updated_user_meta', array($this, 'update_user_profile_fields'),10,4); // when ACF is updated -> update profile
add_action('added_user_meta', array($this, 'update_user_profile_fields'),10,4); // when ACF is added -> update profile
}
public function update_user_profile_fields($meta_id, $user_id, $meta_key, $meta_value){
$user_data = get_userdata( $user_id );
foreach (Sync_ACF_with_User_Profile_Class::$sync_pair as $sync_pair){
if ($sync_pair['acf'] == $meta_key ){
$profile_field = $sync_pair['profile_field'];
$profile_field_value = $user_data->$profile_field;
$update = ($profile_field_value == $meta_value) ? false : wp_update_user(['ID' => $user_id, $profile_field => $meta_value]);
}
}
}
public function update_acf_fields( $user_id, $old_user_data ) {
$user_data = get_userdata( $user_id );
foreach (Sync_ACF_with_User_Profile_Class::$sync_pair as $sync_pair){
$meta_value = get_user_meta($user_id, $sync_pair['acf'] , true);
$profile_field = $sync_pair['profile_field'];
$profile_field_value = $user_data->$profile_field;
$update = ($profile_field_value == $meta_value) ? false : update_user_meta($user_id, $sync_pair['acf'], $profile_field_value );
}
}
}
$sync = new Sync_ACF_with_User_Profile_Class();
add_action( 'wp_loaded', array( $sync, '__construct' ) );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment