web-dev-qa-db-fra.com

Comment supprimer la suppression des règles de réécriture?

J'utilise les types de messages personnalisés. J'essaye ceci:

functions.php

add_action( 'admin_init', 'flush_rewrite_rules' );

Maintenant, je voudrais enlever ceci à nouveau. J'essaye ceci:

remove_action( 'admin_init', 'flush_rewrite_rules' );

Je ne suis pas sûr que cela fonctionne correctement. Comment puis-je tester si les règles de réécriture ne sont plus vraiment caduques?

2
ogni

Pour voir si l’option 'rewrite_rules' a été réinitialisée - c’est ce que flush_rewrite_rules() fait en interne - connectez-vous aux actions sur les options et enregistrez ce qui se passe.

Le petit plugin suivant fait cela. Il vous dira quel code a vidé les règles de réécriture et à quoi elles ressemblaient avant et après le rinçage. Si aucun flush ne s'est produit, il indique simplement nothing logged. :)

<?php
/* Plugin Name: Debug rewrite rule flushing */

add_action( 'plugins_loaded', 'wpse_67368_debug_rewrite_flushes' );

function wpse_67368_debug_rewrite_flushes()
{
    static $log = array ();

    if ( 'plugins_loaded' === current_filter() )
    {
        $hooks = array (
            'added_option',
            'updated_option',
            'deleted_option',
            'shutdown'
        );
        foreach ( $hooks as $hook )
        {
            add_action( $hook, __FUNCTION__, 10, 3 );
        }

        return;
    }

    if ( 'shutdown' === current_filter() )
    {
        empty ( $log ) and $log = 'nothing logged';
        printf( '<pre>%s</pre>', var_export( $log, TRUE ) );
        return;
    }

    $args = func_get_args();
    $option = array_shift( $args );

    if ( 'rewrite_rules' === $option )
    {
        $log[] = array (
            'filter'    => current_filter(),
            'option'    => $option,
            'args'      => $args,
            'backtrace' => debug_backtrace()
        );
    }
}
3
fuxia