Anzahl der Revisionen abhängig vom Post Type

Die Funktion von Revisionen in WordPress ist extrem mächtig, hat aber auch das potential die Datenbank mächtig voll zu packen.

Daher werden die Revisionen gern limitiert, das kann WordPress von Haus aus aber nur für alle Post Types gemeinsam über define( 'WP_POST_REVISIONS', 3 ); (mehr dazu). Dies kann aber durchaus unerwünschte Auswirkungen haben.

In meinem aktuellen Beispiel importiere ich Beiträge aus einem anderen führenden System, und WordPress stellt diese nur dar, hier würde ich also die Revisionen gern auf 0 stellen. Auf der anderen Seite habe ich eine Möglichkeit geschaffen Kategorien individuell mit Gutenberg zu gestalten, dies wird in WordPress gepflegt. Hier möchte ich idealerweise die Revisionen nicht begrenzen, sondern jeden Zwischenschritt speichern, um den Redakteuren zu erlauben Fehler oder Experimente wieder rückgängig machen zu können.

Meine Recherche im Netz ergab dazu: nichts.

Woran das liegt? Gute Frage, entweder es ist kein besonders häufig gesuchtes Problem, andere Leute stellen sich die Frage nicht… Die möglichen Antworten sind viel…

Ich war kurz dafür aufzugeben, aber dann habe ich einmal im Quelltext von WordPress gesucht, und bin ich in der wp-includes/revision.php auf folgenden Filter gestoßen.

/**
 * Filters the number of revisions to save for the given post.
 *
 * Overrides the value of WP_POST_REVISIONS.
 *
 * @since 3.6.0
 *
 * @param int     $num  Number of revisions to store.
 * @param WP_Post $post Post object.
 */
return (int) apply_filters( 'wp_revisions_to_keep', $num, $post );

Dieser erlaubt mir also in Abhängigkeit des Posts zu Filtern, in meinem Fall sieht das so aus:

add_filter( 'wp_revisions_to_keep', 'my_revisions_filter', 10, 2 );

/**
 * Called by filter 'wp_revisions_to_keep' to limit the revisions.
 *
 * @param int     $num  Number of revisions to keep.
 * @param WP_Post $post The WordPress post object.
 *
 * @return int
function my_revisions_filter( $num, $post ) {
	if ( $post->post_type === 'post' ) {
		return 0;
	}
	return $num;
}

Ich filtere also hier in Abhängigkeit vom Post Type, und deaktiviere Revisionen für Posts/Beiträge komplett, während Pages/Seiten und alle anderen Custom Post Types vollkommen unberührt sind, und soviele Revisionen haben, wie ich über die Konstante erlaube

Schreib einen Kommentar

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