Il semble y avoir un avis assez controversé sur la fonction WordPress flush_rewrite_rules()
.
Selon le Codex, il est fortement déconseillé d’utiliser cette fonction sur le crochet d’action init
.
Cependant:
Dans un plugin sur lequel je travaille, j'utilise add_feed()
pour ajouter un flux. Le Codex dit que cela devrait être exécuté sur init
et nécessite l’utilisation ponctuelle de flush_rewrite_rules()
.
Voir mon dilemme? J'ai besoin de add_feed()
sur init
, ce qui nécessite flush_rewrite_rules()
.
Par conséquent, flush_rewrite_rules()
sur init
, qui enfreint toutes les règles de réécriture de type de message personnalisé et tous les liens permanents, générant 404 pages.
Ma question est donc la suivante: comment cela devrait-il être fait?
Voici ce que j'ai actuellement sur init
, qui est lié au problème:
add_action( 'init', 'my_foobar' );
function my_foobar() {
// getting some settings
add_feed( $url, $callback );
flush_rewrite_rules();
}
Toute aide serait grandement appréciée. Merci :)
Vous devez vérifier les règles de réécriture existantes avant de lancer une séquence. Si le nom de votre flux est test
, ils sont stockés sous les touches 'feed/(feed|rdf|rss|rss2|atom|test)/?$'
et '(feed|rdf|rss|rss2|atom|test)/?$'
.
Donc, cela devrait faire l'affaire:
add_action( 'init', function()
{
$name = 'test';
$registered = FALSE;
add_feed( $name, 'test_feed' );
$rules = get_option( 'rewrite_rules' );
$feeds = array_keys( $rules, 'index.php?&feed=$matches[1]' );
foreach ( $feeds as $feed )
{
if ( FALSE !== strpos( $feed, $name ) )
$registered = TRUE;
}
// Feed not yet registered, so lets flush the rules once.
if ( ! $registered )
flush_rewrite_rules( FALSE );
});