Horst Scheuer

Technikkram & Internet

Mein Notebook der Marke LincPlus mit Maus und meiner Brille

WordPress Datenbank bereinigen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 1 Jahr zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

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.