WordPress Migrate Yoast SEO durch Slug Zuordnung

In einem aktuellen Projekt wurden mehrere tausend Seiten von einem WordPress System ein anderes bestehendes System übertragen.

Im Nachgang sollten die Yoast SEO Daten übernommen werden. Aufgrund der neuen ID Struktur war ein einfacher Export und Import nicht möglich. Die Slugs hatten sich jedoch nicht geändert, daher konnte ein Abgleich auf diesen eindeutigen Schlüssel gemacht werden.

1. Export

Aus dem alten System wurde über das folgende "SELECT"-Statement eine CSV-Datei mit allen Yoast SEO Meta Feldern erzeugt:

SELECT meta_key, meta_value, post_name
FROM wp_postmeta
INNER JOIN wp_posts ON wp_postmeta.post_id = wp_posts.ID WHERE meta_key LIKE "%yoast%";

2. Import

Im neuen System wurde vorrübergehend eine neue Tabelle mit dem Namen "_yoast_mapping" angelegt und mit den CSV Daten befüllt.

3. Mapping

Um die Zuordnung zu schaffen wurde eine neue nummerische Spalte mit dem Namen "post_id_new" angelegt. Diese wurde anschließend dynamisch über das folgende SQL Query befüllt:

UPDATE _yoast_mapping  
INNER JOIN wp_posts  
    ON _yoast_mapping.post_name = wp_posts.post_name
SET _yoast_mapping.post_id_new = wp_posts.ID  
WHERE wp_posts.post_status = "publish"

4. Hinzufügen oder aktualisieren von bestehenden Yoast SEO Feldern

INSERT INTO wp_postmeta (meta_key, meta_value, post_id)
		SELECT
			meta_key, meta_value, post_id_new as post_id FROM _yoast_mapping
		WHERE
			post_id_new IS NOT NULL
	ON DUPLICATE KEY UPDATE 
		meta_key = VALUES(meta_key),
		meta_value = VALUES(meta_value),
		post_id = VALUES(post_id);