# Régi felhasználói azonosítók megtartása

> Hogyan tarthatod meg a felhasználók régi azonosítóját importáláskor egyedi kóddal, és mi a teendő, ha ez nem sikerül.

Importáláskor minden felhasználó új azonosítót kap. Ha az importfájl tartalmazza a régi azonosítót, és meg akarod tartani, egyedi PHP-kódra van szükség, amely a WP All Import API-ját használja.

Fontos: ez csak kísérlet. Ha a kért azonosítót az új webhelyen már másik felhasználó használja, a kód nem csinál semmit, és az importált felhasználó új azonosítót kap.

## A beállítás lépései

1. Az **All Import → Beállítások** oldalon, a **Függvényszerkesztő** részben hozd létre az alábbi PHP-függvényt.
2. Hozz létre egy szokásos felhasználóimportot, lásd [WordPress-felhasználók importálása](https://hub.hellowp.io/hu/plugins/wpai-user-add-on/felhasznalok-felhasznalok-importalasa/): új import, mezők hozzárendelése, importbeállítások, futtatás. Az importfájlnak tartalmaznia kell a régi azonosítót is.
3. Futtasd le az importot.

## A függvény

```php
function my_set_user_id( $post_id, $xml_node, $is_update ) {

	global $wpdb;

	// Az import azonosítója.
	$import_id = wp_all_import_get_import_id();

	// Csak az 1-es azonosítójú importnál fut, és csak a felhasználó első létrehozásakor.
	if ( $import_id == '1' && !$is_update) {

		// Az XML-elem tömbbé alakítása a könnyebb használathoz.
		$record = json_decode( json_encode( ( array ) $xml_node ), 1 );

		// A beállítandó azonosító: a 'userid' helyére a fájlban szereplő elem neve kerüljön.
		$requested_id = $record['userid'];

		// Megnézi, hogy a kért azonosító foglalt-e.
		$id_exists = $wpdb->get_var($wpdb->prepare('SELECT user_login FROM '.$wpdb->users.' WHERE ID = '.$requested_id));

		// Ha az azonosító szabad...
		if( $id_exists === null ){

			// ...átírja a felhasználó azonosítóját...
			$wpdb->update($wpdb->users, ['ID'=> $requested_id], ['ID' => $post_id]);

			// ...átírja a hozzá tartozó metaadatok azonosítóját, hogy ne vesszen el a kapcsolat...
			$wpdb->update($wpdb->usermeta, ['user_id'=> $requested_id], ['user_id' => $post_id]);

			// ...és a pmxi_posts táblában is, hogy az import továbbra is kezelni tudja a felhasználót.
			$wpdb->update($wpdb->prefix . 'pmxi_posts', ['post_id'=> $requested_id], ['post_id' => $post_id, 'import_id' => $import_id]);
		}

	}

}
add_action( 'pmxi_saved_post', 'my_set_user_id', 10, 3 );
```

A kódban két helyet kell az importodhoz igazítanod:

- Az `$import_id == '1'` feltételben az `1` helyére a saját importod azonosítója kerüljön.
- A `$record['userid']` kifejezésben a `userid` legyen a régi azonosítót tartalmazó fájlelem valódi neve.

## Gyakori kérdések

**Mit tehetek, ha nem tudom megtartani a régi azonosítókat, és más adatok még a régi azonosítókra hivatkoznak?**
Előbb importáld a felhasználókat, hogy megkapják az új azonosítójukat. A többi adat összekapcsolása attól függ, milyen típusú az adat. Bizonyos esetekben a bővítmény a felhasználót más mező alapján is képes megtalálni, például névből vagy e-mail-címből. Ha nem, egyedi kóddal kell megkeresned az új azonosítót, és beírnod a bejövő adatba.

**Megtarthatom más adatok régi azonosítóját is?**
Igen: a termékek, a bejegyzések, a kategóriák és más taxonómiai kifejezések, valamint a hozzászólások azonosítója is megtartható hasonló egyedi kóddal.
