web-dev-qa-db-fra.com

Comment supprimer définitivement les règles de réécriture par défaut de la table wp_options?

Nous avons des tonnes de règles de réécriture enregistrées dans notre table wp_options et je voudrais supprimer définitivement toutes les entrées que nous n'utilisons pas sur notre site (telles que les flux de commentaires, les pièces jointes, etc.).

Quel est le meilleur moyen d'effacer ces règles et d'empêcher leur enregistrement dans la base de données lors du prochain appel de flush_rules ()? Je préférerais une solution fonctionnant dans functions.php ou en tant que plug-in autonome, plutôt que de modifier des fichiers WP centraux, tels que wp-includes/rewrite.php.

3
Andres Lucero

Plutôt que de modifier les règles stockées, il serait plus fiable de modifier les règles avant leur stockage.

  • flush_rewrite_rules() appelle
  • WP_Rewrite->flush_rules()
  • WP_Rewrite->wp_rewrite_rules()
  • WP_Rewrite->rewrite_rules()

Dans la dernière, il y a des crochets appropriés pour modifier les règles (après quoi ils seront sauvegardés comme d'habitude à chaque chasse):

do_action_ref_array('generate_rewrite_rules', array(&$this));
$this->rules = apply_filters('rewrite_rules_array', $this->rules);
2
Rarst

Pour faire ce que vous voulez, vous allez devoir add_rewrite_rule pour chaque règle que vous avez. Je stocke de nouvelles règles que les utilisateurs ajoutent à un tableau d'options. Si l'utilisateur veut supprimer la règle, une fois sélectionnée, je la désélectionne du tableau.

function remove_rule($user_input){
    foreach($rules as $key => $rule){
        if($rule === $user_input){
            unset($rules[$key]);
        }
    }
    return $rules;
}

Puis reconstruisez à nouveau votre htaccess en ajoutant toutes les règles stockées

foreach($rules as $rule){
    add_rewrite_rule($rule['pattern'], $rule['url'], 'top');
}

J'espère que cela aide tous ceux qui en ont besoin.

0
Andres Abello