Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/09/2021 05:13:00 PM (4 years ago)
Author:
imath
Message:

xProfile: prevent the Name field to override WP Field Types on signup

When the BP xProfile Base Name field synchronization with the WordPress Display Name field is on, we need to make sure values of potential first and/or last name fields using the xProfile WP Field Type are not overridden by this synchronization.

Props needle

See #8568 (trunk)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-xprofile/bp-xprofile-functions.php

    r13108 r13121  
    816816 *
    817817 * @since 1.0.0
    818  *
    819  * @param int $user_id ID of the user to sync.
     818 * @since 9.2.0 Adds the $args arguments to catch hook's additional arguments.
     819 *
     820 * @param int   $user_id ID of the user to sync.
     821 * @param array $args    Hook's additional arguments.
    820822 * @return bool
    821823 */
    822 function xprofile_sync_wp_profile( $user_id = 0 ) {
     824function xprofile_sync_wp_profile( $user_id = 0, ...$args ) {
    823825
    824826    // Bail if profile syncing is disabled.
     
    835837    }
    836838
    837     $fullname = xprofile_get_field_data( bp_xprofile_fullname_field_id(), $user_id );
     839    $fullname_field_id = (int) bp_xprofile_fullname_field_id();
     840    $usermeta          = array();
     841    $userdata          = array();
     842
     843    if ( isset( $args[1]['meta'] ) ) {
     844        $usermeta = $args[1]['meta'];
     845    } elseif ( isset( $args[3] ) ) {
     846        $usermeta = $args[3];
     847    }
     848
     849    if ( isset( $usermeta['profile_field_ids'] ) ) {
     850        $xprofile_fields = wp_parse_id_list( $usermeta['profile_field_ids'] );
     851        $xprofile_fields = array_diff( $xprofile_fields, array( $fullname_field_id ) );
     852
     853        foreach ( $xprofile_fields as $xprofile_field_id ) {
     854            $field_type = bp_xprofile_get_field_type( $xprofile_field_id );
     855
     856            $field_key = 'field_' . $xprofile_field_id;
     857            if ( isset( $field_type->wp_user_key ) && isset( $usermeta[ $field_key ] ) && $usermeta[ $field_key ] ) {
     858                $userdata[ $field_type->wp_user_key ] = $usermeta[ $field_key ];
     859            }
     860        }
     861    }
     862
     863    $fullname = xprofile_get_field_data( $fullname_field_id, $user_id );
    838864    $space    = strpos( $fullname, ' ' );
    839865
    840866    if ( false === $space ) {
    841         $firstname = $fullname;
    842         $lastname = '';
     867        if ( ! isset( $userdata['first_name'] ) ) {
     868            $userdata['first_name'] = $fullname;
     869        }
     870
     871        if ( ! isset( $userdata['last_name'] ) ) {
     872            $userdata['last_name'] = '';
     873        }
    843874    } else {
    844         $firstname = substr( $fullname, 0, $space );
    845         $lastname = trim( substr( $fullname, $space, strlen( $fullname ) ) );
     875        if ( ! isset( $userdata['first_name'] ) ) {
     876            $userdata['first_name'] = substr( $fullname, 0, $space );
     877        }
     878
     879        if ( ! isset( $userdata['last_name'] ) ) {
     880            $userdata['last_name'] = trim( substr( $fullname, $space, strlen( $fullname ) ) );
     881        }
    846882    }
    847883
    848884    bp_update_user_meta( $user_id, 'nickname',   $fullname  );
    849     bp_update_user_meta( $user_id, 'first_name', $firstname );
    850     bp_update_user_meta( $user_id, 'last_name',  $lastname  );
     885    bp_update_user_meta( $user_id, 'first_name', $userdata['first_name'] );
     886    bp_update_user_meta( $user_id, 'last_name',  $userdata['last_name']  );
    851887
    852888    wp_update_user( array( 'ID' => $user_id, 'display_name' => $fullname ) );
    853889}
    854 add_action( 'bp_core_signup_user',      'xprofile_sync_wp_profile' );
    855 add_action( 'bp_core_activated_user',   'xprofile_sync_wp_profile' );
     890add_action( 'bp_core_signup_user', 'xprofile_sync_wp_profile', 10, 5 );
     891add_action( 'bp_core_activated_user', 'xprofile_sync_wp_profile', 10, 3 );
    856892
    857893/**
Note: See TracChangeset for help on using the changeset viewer.