diff --git src/bp-xprofile/bp-xprofile-functions.php src/bp-xprofile/bp-xprofile-functions.php
index b6e6e340d..2505a26e7 100644
--- src/bp-xprofile/bp-xprofile-functions.php
+++ src/bp-xprofile/bp-xprofile-functions.php
@@ -815,11 +815,13 @@ add_action( 'bp_user_query_uid_clauses', 'bp_xprofile_bp_user_query_search', 10,
  * Syncs Xprofile data to the standard built in WordPress profile data.
  *
  * @since 1.0.0
+ * @since 9.2.0 Adds the $args arguments to catch hook's additional arguments.
  *
- * @param int $user_id ID of the user to sync.
+ * @param int   $user_id ID of the user to sync.
+ * @param array $args    Hook's additional arguments.
  * @return bool
  */
-function xprofile_sync_wp_profile( $user_id = 0 ) {
+function xprofile_sync_wp_profile( $user_id = 0, ...$args ) {
 
 	// Bail if profile syncing is disabled.
 	if ( bp_disable_profile_sync() ) {
@@ -834,25 +836,59 @@ function xprofile_sync_wp_profile( $user_id = 0 ) {
 		return false;
 	}
 
-	$fullname = xprofile_get_field_data( bp_xprofile_fullname_field_id(), $user_id );
+	$fullname_field_id = (int) bp_xprofile_fullname_field_id();
+	$usermeta          = array();
+	$userdata          = array();
+
+	if ( isset( $args[1]['meta'] ) ) {
+		$usermeta = $args[1]['meta'];
+	} elseif ( isset( $args[3] ) ) {
+		$usermeta = $args[3];
+	}
+
+	if ( isset( $usermeta['profile_field_ids'] ) ) {
+		$xprofile_fields = wp_parse_id_list( $usermeta['profile_field_ids'] );
+		$xprofile_fields = array_diff( $xprofile_fields, array( $fullname_field_id ) );
+
+		foreach ( $xprofile_fields as $xprofile_field_id ) {
+			$field_type = bp_xprofile_get_field_type( $xprofile_field_id );
+
+			$field_key = 'field_' . $xprofile_field_id;
+			if ( isset( $field_type->wp_user_key ) && isset( $usermeta[ $field_key ] ) && $usermeta[ $field_key ] ) {
+				$userdata[ $field_type->wp_user_key ] = $usermeta[ $field_key ];
+			}
+		}
+	}
+
+	$fullname = xprofile_get_field_data( $fullname_field_id, $user_id );
 	$space    = strpos( $fullname, ' ' );
 
 	if ( false === $space ) {
-		$firstname = $fullname;
-		$lastname = '';
+		if ( ! isset( $userdata['first_name'] ) ) {
+			$userdata['first_name'] = $fullname;
+		}
+
+		if ( ! isset( $userdata['last_name'] ) ) {
+			$userdata['last_name'] = '';
+		}
 	} else {
-		$firstname = substr( $fullname, 0, $space );
-		$lastname = trim( substr( $fullname, $space, strlen( $fullname ) ) );
+		if ( ! isset( $userdata['first_name'] ) ) {
+			$userdata['first_name'] = substr( $fullname, 0, $space );
+		}
+
+		if ( ! isset( $userdata['last_name'] ) ) {
+			$userdata['last_name'] = trim( substr( $fullname, $space, strlen( $fullname ) ) );
+		}
 	}
 
 	bp_update_user_meta( $user_id, 'nickname',   $fullname  );
-	bp_update_user_meta( $user_id, 'first_name', $firstname );
-	bp_update_user_meta( $user_id, 'last_name',  $lastname  );
+	bp_update_user_meta( $user_id, 'first_name', $userdata['first_name'] );
+	bp_update_user_meta( $user_id, 'last_name',  $userdata['last_name']  );
 
 	wp_update_user( array( 'ID' => $user_id, 'display_name' => $fullname ) );
 }
-add_action( 'bp_core_signup_user',      'xprofile_sync_wp_profile' );
-add_action( 'bp_core_activated_user',   'xprofile_sync_wp_profile' );
+add_action( 'bp_core_signup_user', 'xprofile_sync_wp_profile', 10, 5 );
+add_action( 'bp_core_activated_user', 'xprofile_sync_wp_profile', 10, 3 );
 
 /**
  * Syncs the standard built in WordPress profile data to XProfile.
diff --git tests/phpunit/testcases/xprofile/functions.php tests/phpunit/testcases/xprofile/functions.php
index 10dd64e1d..d8ee6b921 100644
--- tests/phpunit/testcases/xprofile/functions.php
+++ tests/phpunit/testcases/xprofile/functions.php
@@ -1206,4 +1206,182 @@ Bar!';
 
 		$this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) );
 	}
+
+	/**
+	 * @ticket BP8568
+	 */
+	public function test_xprofile_sync_wp_profile_signup_with_wp_first_and_last_name_fields() {
+		add_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		$u = self::factory()->user->create_and_get(
+			array(
+				'user_login' => 'foobar',
+				'user_email' => 'foo@bar.email',
+			)
+		);
+
+		$field_fn = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => 1,
+				'type'           => 'wp-textbox',
+				'name'           => 'WP First Name',
+			)
+		);
+
+		// Set the WP User Key.
+		bp_xprofile_update_meta( $field_fn, 'field', 'wp_user_key', 'first_name' );
+
+		$field_ln = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => 1,
+				'type'           => 'wp-textbox',
+				'name'           => 'WP Last Name',
+			)
+		);
+
+		// Set the WP User Key.
+		bp_xprofile_update_meta( $field_ln, 'field', 'wp_user_key', 'last_name' );
+
+		$field_n  = bp_xprofile_fullname_field_id();
+		$usermeta = array(
+			'field_' . $field_n  => 'foobar',
+			'field_' . $field_fn => 'Foo',
+			'field_' . $field_ln => 'Bar',
+			'profile_field_ids'  => $field_n . ',' . $field_fn . ',' . $field_ln,
+		);
+
+		remove_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		// simulates do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta );
+		xprofile_sync_wp_profile( $u->ID, $u->user_login, $u->user_pass, $u->user_email, $usermeta );
+
+		$updated_u = get_user_by( 'id', $u->ID );
+
+		$this->assertEquals( 'Foo', $updated_u->first_name );
+		$this->assertEquals( 'Bar', $updated_u->last_name );
+	}
+
+	/**
+	 * @ticket BP8568
+	 */
+	public function test_xprofile_sync_wp_profile_signup_without_wp_first_and_last_name_fields() {
+		add_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		$u = self::factory()->user->create_and_get(
+			array(
+				'user_login' => 'foobar',
+				'user_email' => 'foo@bar.email',
+			)
+		);
+
+		$field_n  = bp_xprofile_fullname_field_id();
+		$usermeta = array(
+			'field_' . $field_n  => 'foobar',
+			'profile_field_ids'  => $field_n,
+		);
+
+		remove_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		// simulates do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta );
+		xprofile_sync_wp_profile( $u->ID, $u->user_login, $u->user_pass, $u->user_email, $usermeta );
+
+		$updated_u = get_user_by( 'id', $u->ID );
+
+		$this->assertEquals( 'foobar', $updated_u->first_name );
+		$this->assertEquals( '', $updated_u->last_name );
+	}
+
+	/**
+	 * @ticket BP8568
+	 */
+	public function test_xprofile_sync_wp_profile_activate_signup_with_wp_first_and_last_name_fields() {
+		add_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		$u = self::factory()->user->create_and_get(
+			array(
+				'user_login' => 'barfoo',
+				'user_email' => 'bar@foo.email',
+			)
+		);
+
+		$field_fn = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => 1,
+				'type'           => 'wp-textbox',
+				'name'           => 'WP First Name',
+			)
+		);
+
+		// Set the WP User Key.
+		bp_xprofile_update_meta( $field_fn, 'field', 'wp_user_key', 'first_name' );
+
+		$field_ln = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => 1,
+				'type'           => 'wp-textbox',
+				'name'           => 'WP Last Name',
+			)
+		);
+
+		// Set the WP User Key.
+		bp_xprofile_update_meta( $field_ln, 'field', 'wp_user_key', 'last_name' );
+
+		$field_n  = bp_xprofile_fullname_field_id();
+
+		$user = array(
+			'user_id'  => $u->ID,
+			'password' => $u->user_pass,
+			'meta'     => array(
+				'field_' . $field_n  => 'barfoo',
+				'field_' . $field_fn => 'Bar',
+				'field_' . $field_ln => 'Foo',
+				'profile_field_ids'  => $field_n . ',' . $field_fn . ',' . $field_ln,
+			),
+		);
+
+		remove_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		// simulates do_action( 'bp_core_activated_user', $user_id, $key, $user );
+		xprofile_sync_wp_profile( $u->ID, 'randomkey', $user );
+
+		$updated_u = get_user_by( 'id', $u->ID );
+
+		$this->assertEquals( 'Bar', $updated_u->first_name );
+		$this->assertEquals( 'Foo', $updated_u->last_name );
+	}
+
+	/**
+	 * @ticket BP8568
+	 */
+	public function test_xprofile_sync_wp_profile_activate_signup_without_wp_first_and_last_name_fields() {
+		add_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		$u = self::factory()->user->create_and_get(
+			array(
+				'user_login' => 'barfoo',
+				'user_email' => 'bar@foo.email',
+			)
+		);
+
+		$field_n  = bp_xprofile_fullname_field_id();
+
+		$user = array(
+			'user_id'  => $u->ID,
+			'password' => $u->user_pass,
+			'meta'     => array(
+				'field_' . $field_n  => 'barfoo',
+				'profile_field_ids'  => $field_n,
+			),
+		);
+
+		remove_filter( 'bp_disable_profile_sync', '__return_true' );
+
+		// simulates do_action( 'bp_core_activated_user', $user_id, $key, $user );
+		xprofile_sync_wp_profile( $u->ID, 'randomkey', $user );
+
+		$updated_u = get_user_by( 'id', $u->ID );
+
+		$this->assertEquals( 'barfoo', $updated_u->first_name );
+		$this->assertEquals( '', $updated_u->last_name );
+	}
 }
