WordPress Importer: Metadaten aktualisieren
Veröffentlicht: – Kommentar hinterlassen
Standardmäßig erkennt der WordPress Importer vorhandene Daten und aktualisiert sie nicht. Aber was, wenn du explizit vorhandene Daten aktualisieren willst – insbesondere Metadaten?
Der WordPress Importer prüft, ob ein Beitrag existiert und erlaubt dir, dieses Verhalten über den Filter wp_import_existing_post zu ändern. Allerdings erlaubt er dir nicht dasselbe für Metadaten, da diese nicht geprüft werden. Stattdessen verwendet der WordPress Importer nur add_post_meta, um Metadaten zu einem Beitrag hinzuzufügen. Und da add_post_meta keine bereits vorhandenen Metadaten aktualisiert, fügt es nur neue Daten hinzu, wenn es sie noch nicht gibt.
Die Lösung dafür ist relativ simpel: Vor dem Hinzufügen der Metadaten löschen wir einfach alle existierenden Metadaten. Wie erwähnt, gibt es keinen Filter oder Hook für die Metadaten im Importer. Daher verwenden wir hier den bereits genannten Filter wp_import_existing_post, um existierende Metadaten vor dem Hinzufügen dann neuer Metadaten zu löschen.
/**
* Update existing postmeta data.
*
* @param int $post_id post ID
* @return int Post ID
*/
public function update_existing_postmeta( int $post_id ): int {
if ( $post_id > 0 ) {
// delete post metadata to allow its "update"
// the importer uses add_post_meta, which does not update itself
$metadata = \get_post_meta( $post_id );
foreach ( \array_keys( $metadata ) as $meta_key ) {
\delete_post_meta( $post_id, $meta_key );
}
}
return $post_id;
}
\add_filter( 'wp_import_existing_post', 'update_existing_postmeta' );
Code-Sprache: PHP (php)