add_feed и flush_rewrite_rules

Там , кажется, весьма спорное мнение о WordPress flush_rewrite_rules() функции.

Согласно Кодексу, крайне не рекомендуется использовать эту функцию на крючке инициации.

Однако:

В плагине, над которым я работаю, я использую add_feed() чтобы добавить фид. Codex говорит, что это должно быть запущено на init и требует одноразового использования flush_rewrite_rules() .

См. Мою дилемму? Мне нужно add_feed() для init , для чего требуется flush_rewrite_rules() .

Следовательно, flush_rewrite_rules() для init , который разбивает все правила переписывания типа персонализированного типа и постоянные ссылки, что приводит к 404 страницам.

Поэтому мой вопрос: как это сделать?

Это то, что я сейчас имею в init , что связано с проблемой:

 add_action( 'init', 'my_foobar' ); function my_foobar() { // getting some settings add_feed( $url, $callback ); flush_rewrite_rules(); } 

Любая помощь будет принята с благодарностью. благодаря 🙂

Solutions Collecting From Web of "add_feed и flush_rewrite_rules"

Перед запуском флеша вам необходимо проверить существующие правила перезаписи. Если ваше имя фида test , они хранятся под 'feed/(feed|rdf|rss|rss2|atom|test)/?$' И '(feed|rdf|rss|rss2|atom|test)/?$' .

Так что это должно сделать трюк:

 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 ); });