Пользовательский тип сообщения Постоянная ссылка / перезапись не работает сразу

9

Удар кирпичной стены со следующим:

Я имею:

  • 1 пользовательский тип сообщения называется cpt_community
  • 1 пользовательская таксономия называется tax_community

Если я установлю 'rewrite' => trueв своей регистрации CPT, то постоянные ссылки на запись для этого CPT имеют форму http://<domain>/cpt_community/test_item/, и я получаю 404 при просмотре.

Если я установлю 'rewrite' => false, то постоянные ссылки есть http://<domain>/?cpt_community=test_item/, и это прекрасно работает.

Итак, я явно делаю что-то не так / глупо - вопрос в том, что?

[Обновить]

  • После каждого изменения я сбрасываю правила, выбирая Настройки> Постоянные ссылки (и сохраняю)
  • Оставив все на час в покое, все заработало правильно - так почему задержка?

Код

CPT Регистрация

function community_post_type() {
  $labels = array('name'  => 'Community');

   $args = array(
      'labels' => $labels,
      'public' => true,
      'publicly_queryable' => true,
      'show_ui' => true,
      'show_in_menu' => true,
      'query_var' => true,
      'rewrite' => false,
      'capability_type' => 'post',
      'has_archive' => true,
      'hierarchical' => false,
      'menu_position' => null,
      'has_archive' => true,
      'supports' => array('title','editor','excerpt','custom-fields','comments','revisions','thumbnail','author','page-attributes')
   ); 

  register_post_type('cpt_community', $args);
}  
add_action( 'init', 'community_post_type' );

Таможенная регистрация таксономии

function community_tax_type() {
  register_taxonomy(
    'tax_community',
    'cpt_community',
     array( 'hierarchical' => false,
       'label' => 'Community Content Type',
       'show_ui' => true,'query_var' => true,
       'rewrite' => true,
       'singular_label' => 'Community Content Type',
       'capabilities' => array('assign_terms' => 'edit_community_tags')
       )
   );
   # allow roles to add community taxonomy tags to a community CPT
   $roles = array("subscriber","contributor","author","editor","administrator");

   foreach ($roles as $role_name) {
     $role = get_role($role_name);
     $role->add_cap("edit_community_tags");
   }   
}
add_action( 'init', 'community_tax_type' );
ана
источник
1
Вы сначала перезаписали записи, посетив страницу с постоянными ссылками и сохранив их?
Майло
@ Мило - ага. Интересно, что после ухода в течение часа, а затем возвращения, теперь работают «красивые постоянные ссылки» - я обновлю вопрос и сформулирую его как «почему задержка»
ан
Вы используете плагин кеширования? Работает ли он быстрее, если все остальные плагины отключены? (Просто убираю обычных подозреваемых)
Ян Фабри
@jan - нет плагина для кеширования. Проблема в том, что я не могу воспроизвести это поведение - это случилось пару раз и прошло после, но без каких-либо конкретных действий (которые я могу сказать), чтобы фактически исправить это.
ана

Ответы:

7

Используйте функцию flush_rewrite_rules () для установки новых правил перезаписи, но не с вашим кодом на init-hook, только на плагин активации или тему! Смотрите больше в моем посте: http://wpengineer.com/2044/custom-post-type-and-permalink/

global $wp_rewrite;
$wp_rewrite->flush_rules();

Сбрасывать правила только при активации (и деактивации). Не делай этого на любом другом крючке.

register_activation_hook()
bueltge
источник
4

Просто зайдите в Настройки> Постоянные ссылки, чтобы прошить правила. Код не требуется. Вам не нужно обновлять структуру, просто открытие этой страницы администратора делает работу

Jukov
источник
но вам придется посещать эту страницу каждый раз, когда возникает ошибка. Используя flush_rewrite_rules (); Функция означает, что они сбрасываются без реальной потребности во взаимодействии.
Алекс Старше