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

10

En particulier dans le tableau wp_options. Après près de 2 ans de production de blog, cela semble avoir beaucoup augmenté, et je ne sais pas combien de merde y est.

Connaissez-vous un plugin qui fonctionne avec WordPress 3.0 ou une requête sûre à exécuter pour rechercher des clés / lignes orphelines?

Canard
la source

Réponses:

7

Il n'y a pas de requête qui sera sûre à 100% de supprimer tout ce qui n'est pas utilisé et de ne pas supprimer ces choses car n'importe quel thème ou plugin peut ajouter des options au wp_optionstableau. Pourtant, avec un petit effort, vous pouvez avoir une assez bonne idée de ce qui n'est pas utilisé, puis décider manuellement lesquelles de ces choses supprimer et lesquelles ne pas le faire.

Vous pouvez mettre temporairement le code suivant dans le functions.phpfichier 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 wp_optionstable et regarder le champ use_count(ajouté par le code ci-dessous) pour voir quelles options ont un use_countégal à zéro (le nombre d'utilisation n'a généralement pas de sens, sauf si tout ce qui est 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'");
}

Avec cela, vous serez probablement en mesure d'identifier les options associées aux plugins disparus depuis longtemps, aux anciens thèmes et même aux options que vous avez ajoutées au début, mais que vous n'utilisez plus. Exportez-les tous vers une sauvegarde (au cas où), puis supprimez ceux que vous êtes prêt à supprimer. Une fois que vous avez terminé, vous pouvez supprimer le use_countchamp (si vous le souhaitez, cela ne fait pas de mal qu'il soit là) et également supprimer le code ci-dessus de votre functions.phpfichier.

Bien que ce ne soit toujours pas parfait, c'est beaucoup mieux que rien. J'espère que ça aide?

MikeSchinkel
la source
Je recommanderais fortement memcached / incr () pour cela au lieu de quantités potentiellement massives d'écritures db.
Denis de Bernardy
3
@Denis - Étant donné que memcached nécessite une configuration de serveur avancée qui n'est même pas possible sur un serveur partagé où la plupart des sites WordPress sont hébergés, et puisqu'il s'agit d'une routine de diagnostic ponctuelle ou occasionnelle, je ne vois pas pourquoi vous mettriez l'accent sur le besoin pour memcached pour ce cas d'utilisation ? Peut-être que je manque quelque chose, pouvez-vous expliquer pourquoi quelqu'un qui devrait passer à un serveur VPS ou dédié et apprendre à faire ou demander à quelqu'un de configurer memcached devrait le faire juste pour éviter un grand nombre de hits de base de données pour un rarement utilisé la routine de maintenance?
MikeSchinkel
4

Le plugin Clean Options a bien fonctionné pour moi. La description de l'auteur du plugin 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 la prise en charge définitive de WP 2.3), c'est bien!

Mike Lee
la source
2

Cela ne supprimera pas nécessairement les problèmes avec, wp_optionsmais 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 automatiquement résoudre 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 maintenant beaucoup plus facilement.

EAMann
la source
1

J'exécute à la fois Clean Options et WP_Optimize sur mon site, et le combo fait un travail formidable pour garder la base de données en parfait état.

Keith S.
la source