Intereting Posts
Пользовательский шаблон страницы типа архива Как разделить первый пост 3 на странице «Архивы категорий» Подсчитать результаты поиска в заголовке не может изменить несколько строк текста на другой язык браузер, показывающий соединение, был сброшен при доступе к сообщениям с локального хоста 404 и индекс Google Почему wp_dropdown_categories не выполняет поиск в подкатегориях в моей пользовательской таксономии Различные правила перезаписи для таксономий и cp в многопользовательском режиме? Исключить блокировку отображения JavaScript и CSS в надводном содержимом Итеративно добавьте вспомогательные короткие коды в php-массив Как я могу «удалить» персонализированный пост, когда вы вошли в систему как Admin Разбиение пользовательских сообщений в категориях приводит к ошибке 404 Как использовать jquery, включенный в wordpress для jpanelmenu Вход в качестве клиента отсутствует в меню панели? Перенаправление с панели управления на edit.php, если wp_is_mobile () истинно

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' ); ?> 

Ваша проблема заключается в том, что вы очищаете правила перезаписи до регистрации типов записей. Ваш 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, а затем … ничего, вы сделали все. Только сброс постоянных ссылок, когда все изменилось, а не на каждую загрузку страницы.

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