web-dev-qa-db-fra.com

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

En particulier dans la table wp_options. Après presque 2 ans de production de blogs, il semble avoir beaucoup augmenté, et je ne sais pas combien de merde y est.

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

10
Drake

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 assez bonne idée de ce qui n’est pas utilisé, puis décider manuellement des éléments à supprimer et des éléments à ne pas supprimer.

Vous pouvez insérer temporairement le code suivant dans le fichier functions.php de votre thème, puis visiter chaque (type de) page 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 généralement dépourvu de signification, sauf si une valeur supérieure à 1 a été utilisée. 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'");
}

Avec 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 que vous avez ajoutées tôt 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.

Bien que ce ne soit pas encore parfait, il vaut bien mieux que rien. J'espère que ça aide?

7
MikeSchinkel

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: "Recherche 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 prend en charge WP 2.7 (alors que Clean Options ne mentionne que le support définitif pour WP 2.3), Nice!

4
Mike Lee

Cela ne résoudra pas nécessairement les problèmes avec wp_options mais j'ai utilisé WP-Optimize pour résoudre de nombreux problèmes de dimensionnement de la base 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.

2
EAMann

J'exécute les options propres et WP_Optimize sur mon site, et le combo fait un travail formidable pour maintenir la base de données en bon état.

1
Keith S.