Ja, ich weiß, es gibt jede Menge Plugins, die die WordPress Datenbank bereinigen. Es geht aber ohne. Nachfolgender Code für die functions.php
eines Child-Themes löscht aus der Tabelle „wp_posts“ „auto-draft“, „Custom Styles“ und „Revision“. Aus der Tabelle „wp_postmeta“ werden „oembed“, „edit_last“, „edit_lock“, „wp_old_date“ und „wp_old_slug“ gelöscht. Diese Aktion erfolgt, mithilfe eines Transienten, automatisch alle 14 Tage.
/**
* Datenbank bereinigen
* --------------------
* löscht einige Einträge aus der SQL Post- und Post-Meta-Tabelle
*/
function wp_delete_autodraft() {
global $wpdb;
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft'" );
foreach ( (array) $old_posts as $delete ) {
wp_delete_post( $delete, true );
}
}
function wp_delete_customstyles() {
global $wpdb;
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_title = 'Custom Styles'" );
foreach ( (array) $old_posts as $delete ) {
wp_delete_post( $delete, true );
}
}
function wp_delete_revision() {
global $wpdb;
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type = 'Revision'" );
foreach ( (array) $old_posts as $delete ) {
wp_delete_post( $delete, true );
}
}
function wp_delete_oembed() {
global $wpdb;
$old_posts = $wpdb->get_col( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key LIKE '%_oembed_%'" );
foreach ( (array) $old_posts as $delete ) {
wp_delete_post( $delete, true );
}
}
function delete_meta_keys() {
$fields = array(
'_edit_last',
'_edit_lock',
'_wp_old_date',
'_wp_old_slug'
);
foreach( $fields as $field ) {
delete_metadata( 'post', 0, $field, false, true );
}
}
if ( is_admin() ) {
if ( ! get_transient( 'clean_db_timer' ) && get_transient( 'optimized_db_timer' ) ) {
set_transient( 'clean_db_timer', wp_date( "d.m.y H:i" ), 60 * 60 * 24 * 14 );
add_action( 'admin_init', 'wp_delete_autodraft' );
add_action( 'admin_init', 'wp_delete_customstyles' );
add_action( 'admin_init', 'wp_delete_revision' );
add_action( 'admin_init', 'wp_delete_oembed' );
add_action( 'admin_init', 'delete_meta_keys' );
}
}
Man kann natürlich geteilter Meinung sein, was diese Einträge in der Datenbank-Tabelle angeht. Ich finde, es ist überflüssiger Ballast. Bei mir ist bis jetzt die Datenbank heil geblieben. Falls ihr diesen Code nutzt, dann auf eigene Gefahr.