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);