flush_rewrite_rules на каждом register_post_type?

Я застрял в ужасной ситуации, и я думаю, что это потому, что я зарегистрировал 5 типов сообщений, но сразу вызвал функцию flash_rewrite_rules (), поэтому у меня есть этот вопрос:

Должен ли я вызвать функцию flash_rewrite_rules () после каждой регистрации пользовательского типа сообщения или только одного вызова?

И, кстати, нормально ли иметь 10 настраиваемых типов сообщений для темы (или столько, сколько мы хотим)? любое влияние на производительность?

Спасибо.

<?php /*** Registering book post type ***/ function px_book() { $labels = array( 'name' => 'books', 'singular_name' => 'book', 'menu_name' => 'books', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'book' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'book', $args ); } add_action( 'init', 'px_book' ); /*** Registering book post type ***/ function px_movie() { $labels = array( 'name' => 'movies', 'singular_name' => 'movie', 'menu_name' => 'movies', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'movie' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'movie', $args ); } add_action( 'init', 'px_movie' ); add_action( 'after_switch_theme', 'flush_rewrite_rules' ); ?> 

или вот так:

  <?php /*** Registering book post type ***/ function px_book() { $labels = array( 'name' => 'books', 'singular_name' => 'book', 'menu_name' => 'books', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'book' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'book', $args ); } add_action( 'init', 'px_book' ); add_action( 'after_switch_theme', 'flush_rewrite_rules' ); /*** Registering book post type ***/ function px_movie() { $labels = array( 'name' => 'movies', 'singular_name' => 'movie', 'menu_name' => 'movies', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'movie' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'movie', $args ); } add_action( 'init', 'px_movie' ); add_action( 'after_switch_theme', 'flush_rewrite_rules' ); ?> 

Solutions Collecting From Web of "flush_rewrite_rules на каждом register_post_type?"

Ваша проблема заключается в том, что вы очищаете правила перезаписи до регистрации типов записей. Ваш after_switch_theme должен выглядеть примерно так:

 function px_book() { $labels = array( 'name' => 'books', 'singular_name' => 'book', 'menu_name' => 'books', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'book' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'book', $args ); } add_action( 'init', 'px_book' ); function px_movie() { $labels = array( 'name' => 'movies', 'singular_name' => 'movie', 'menu_name' => 'movies', ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'movie' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ) ); register_post_type( 'movie', $args ); } add_action( 'init', 'px_movie' ); add_action( 'after_switch_theme', function() { // At this point, post types are not registered // register post types px_movie(); px_book(); // flush rewrite rules flush_rewrite_rules(); } ); 

Зачем? Когда вы нажимаете «Активировать» тему, событие init в загрузке следующей страницы запускается до активации вашей темы, поэтому after_switch_theme функции, которые вы запускаете в init , не запускаются. Это похоже на то, что описано в register_post_type на Codex при регистрации типов сообщений в плагинах (кстати, я думаю, что регистрация типов сообщений должна выполняться в плагинах, а не в темах. Темы для внешнего вида, типы сообщений – это структура контента, а не внешний вид и ощущение. Если вы переключитесь на другую тему, вы потеряете контент, это очень плохо ).

Не называйте flush_rewrite_rules . Это супер дорогой призыв сделать и замедлять все.

Кроме того, порядок имеет значение, но правильная вещь – регистрировать все типы контента, а затем повторно сохранять постоянные ссылки в WP Admin, а затем … ничего, вы сделали все. Только сброс постоянных ссылок, когда все изменилось, а не на каждую загрузку страницы.

Кроме того, не регистрируйте типы сообщений и таксономии внутри тем, вы потеряете доступ к данным, когда пользователь переключится на другую тему. Темы для внешнего вида, плагины для функциональности