Ankerlink an den Anfang der Seite
foto von michael dziedzic
Generic filters
Filter by Kategorien

Der Beitrag, geschriebem am 8. April 2022, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Die meisten Themes die man in WordPress ausprobiert, hinterlassen Spuren. Vor allem Premium-Themes mit ihrer Vielzahl an Einstellungen, die sich nicht nur auf das globale Erscheinungsbild beschränken, sondern pro Seite / Beitrag und sonstigen Inhaltstypen vorgesehen sind, hinterlassen mithin Tausende von Einträgen in der Post-Meta-Tabelle in so genannten Custom Fields.

Das Plugin Advanced Custom Fields hinterlässt pro Feld (unabhängig davon ob Haupt- oder Subfeld) gleich zwei Einträge.

Aus welchen sonstigen Gründen auch immer Post-Meta-Daten aus dem System entfernt werden sollen, wie das geht, wird hier gezeigt. Voraussetzung ist, dass die Schlüssel (Feldnamen) bekannt sind.

Für die Massenbearbeitung von Inhalten gibt es natürlich auch das eine oder andere Plugin. Geht es um das Löschen von benutzerdefinierten Feldern, darf mit Kosten gerechnet werden.

WordPress selbst bietet (natürlich) auch eine Funktion an, um Post-Meta-Daten zu löschen. So muss nicht zwingend ein Plugin dafür gesucht und installiert werden, dessen Funktionalität es vielleicht nur ein einziges Mal braucht.

Die Funktion delete_metadata wird mit 5 Parametern aufgerufen:

'post' bedeutet, der Vorgang bezieht sich auf post-Objekte, es könnte auch 'term' oder 'user' sein (alles, was eine objekttypmeta-Tabelle hat).

Der zweite Parameter, hier '0', bezieht sich auf die ID (es könnten hier also auch nur die MetaDaten bestimmter Posts nach deren ID gelöscht werden).

Der dritte Parameter (im Beispiel $field) bezieht sich auf den Meta_key.

Nummer vier, der Meta_value, muss, um wirklich alle Felder zu löschen, ein leere String ('') sein, oder false.

Der fünfte und letzte Parameter muss true sein, damit alle Felder mit den angegebenen Schlüsseln gelöscht werden.

function delete_useless_postmeta() {
	$fields = array( 
		'useless_data_key_1',
		'useless_data_key_2' ....
	);
	foreach( $fields as $field ) {
		delete_metadata( 'post', 0, $field, false, true );
	}
}

Um den Vorgang zu initialisieren, kann er über eine Einstelllung aktiviert werden, oder einen Hook. Nach dem Durchlauf könnte eine Option hinzugefügt werden, um ein Flag zu setzen, sodass der Vorgang nur einmal durchgeführt wird.

function delete_useless_postmeta() {
	if ( 'done' == get_option('prefix_useless_deleted') ) return;
	$fields = array( 
		'useless_data_key_1',
		'useless_data_key_2' ....
	);
	foreach( $fields as $field ) {
		delete_metadata( 'post', 0, $field, false, true );
	}
	add_option('prefix_useless_deleted', 'done');
}
add_action( 'init', 'delete_useless_postmeta' );

Die Voraussetzung dafür, eine Funktion wie diese zu verwenden ist zu wissen, was man tut, warum man es tut und mit welchen Konsequenzen, und vor allem, vorher ein Datenbankbackup gemacht zu haben! Sind die Daten erst gelöscht, gibt es kein Zurück mehr.

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

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

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.