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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Um auf deiner eigenen Website zu antworten, gib die URL deiner Antwort ein, die einen Link zur Permalink-URL dieses Beitrags enthalten sollte. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite erscheinen. Möchtest du deine Antwort aktualisieren oder entfernen? Aktualisiere oder lösche deinen Beitrag und gib die URL deines Beitrags noch einmal ein. (Mehr über die Funktion von Webmentions erfahren)