Comment puis-je supprimer des clés orphelines dans les tables de base de données WordPress?

10

En particulier dans la table wp_options . Après près de 2 ans de production de blogs, il semble que la quantité de billets ait considérablement augmenté et je ne sais pas combien de merde y est contenue.

Connaissez-vous un plug-in fonctionnant avec WordPress 3.0 ou une requête sécurisée à exécuter pour rechercher des clés / lignes orphelines?

    
posée Drake 11.08.2010 - 22:16

4 réponses

7

Aucune requête ne sera à 100% certaine de supprimer tout ce qui n’est pas utilisé et de ne pas le faire, car tout thème ou plug-in peut ajouter des options à la table wp_options . Néanmoins, avec un peu d’effort, vous pouvez avoir une bonne idée de ce qui n’est pas utilisé, puis décider manuellement lequel de ces éléments doit être supprimé et lequel ne doit pas être supprimé.

Vous pouvez insérer temporairement le code suivant dans le fichier functions.php de votre thème, puis visiter toutes les (types de) pages de votre site public et, plus important encore, toutes les pages d'administration de la console d'administration. Une fois que vous avez fait cela, vous pouvez ouvrir votre table wp_options et consulter le champ use_count (ajouté par le code ci-dessous) pour voir quelles options ont un use_count égal à zéro (le nombre d'utilisations est essentiellement sans signification autre que tout élément supérieur à 1 a été lu ou mis à jour au moins une fois depuis que vous avez ajouté ce code.)

global $wpdb;
header('Content-Type:text/plain');
$results = $wpdb->get_results("SHOW COLUMNS FROM wp_options WHERE Field='use_count'");
if (count($results)==0) {
    $wpdb->query("ALTER TABLE {$wpdb->options} ADD COLUMN use_count int UNSIGNED NOT NULL DEFAULT '0' AFTER autoload");
}

add_action('all','monitor_get_option_usage');
function monitor_get_option_usage($filter){
    if (preg_match('#^option_(.*)$#',$filter)) {
        increment_option_use_count(substr($filter,7));
    }
}
add_action('updated_option','monitor_update_option_usage');
function monitor_update_option_usage($option){
    increment_option_use_count($option);
}
function increment_option_use_count($option) {
    global $wpdb;
    $wpdb->query("UPDATE {$wpdb->options} SET use_count = use_count + 1 WHERE option_name = '$option'");
}

Grâce à cela, vous serez probablement en mesure d’identifier les options associées aux plugins disparus, aux anciens thèmes et même aux options que vous avez vous-même ajoutées précédemment mais que vous n’utilisez plus. Exportez-les tous vers une sauvegarde (au cas où), puis supprimez celles que vous souhaitez supprimer. Une fois que vous avez terminé, vous pouvez supprimer le champ use_count (si vous le souhaitez, cela ne fait pas de mal pour qu’il soit là) et également supprimer le code ci-dessus de votre fichier functions.php .

Même si ce n’est pas encore parfait, c’est bien mieux que rien. J'espère que ça aide?

    
réponse donnée MikeSchinkel 12.08.2010 - 06:02
4

Le plugin Options de nettoyage a bien fonctionné pour moi. La description du plug-in par l'auteur semble correspondre à ce dont vous avez besoin: "Trouve les options orphelines et permet leur suppression de la table wp_options."

Je n'ai pas encore essayé WP-Optimize personnellement, mais celui-ci semble également prometteur. Et il dit qu'il supporte WP 2.7 (alors que Clean Options ne mentionne que le support définitif pour WP 2.3), sympa!

    
réponse donnée Mike Lee 12.08.2010 - 03:19
2

Cela ne résoudra pas nécessairement les problèmes liés à wp_options mais j'ai utilisé WP-Optimize pour corrige beaucoup de problèmes de dimensionnement de bases de données sur mes sites 3.0. Il supprime les révisions de publication inutiles, les commentaires de spam et peut résoudre automatiquement de nombreux problèmes. Sur mon blog principal, la base de données a été réduite de 30 Mo à un peu moins de 6 Mo et fonctionne beaucoup plus facilement maintenant.

    
réponse donnée EAMann 11.08.2010 - 22:28
1

J'utilise à la fois Clean Options et WP_Optimize sur mon site, et la liste déroulante fait un travail remarquable pour maintenir la base de données en bon état.

    
réponse donnée Keith S. 13.08.2010 - 18:03

Lire d'autres questions sur les étiquettes