Permalien / réécriture de type de message personnalisé ne fonctionne pas immédiatement

9

Frapper un mur de briques avec ce qui suit:

J'ai:

  • 1 type de message personnalisé appelé cpt_community
  • 1 taxonomie personnalisée appelée tax_community

Si j'ai défini 'rewrite' => truemon enregistrement CPT, les liens permanents vers une entrée pour ce CPT sont de la forme de http://<domain>/cpt_community/test_item/, et j'obtiens un 404 lorsque j'y navigue.

Si je définis 'rewrite' => false, alors les permaliens le sont http://<domain>/?cpt_community=test_item/, et cela fonctionne très bien.

Donc, je fais évidemment quelque chose de mal / stupide - la question est, quoi?

[Mise à jour]

  • Après chaque modification, je vide les règles en allant dans Paramètres> Permaliens (et en enregistrant)
  • Après avoir tout laissé seul pendant une heure, les choses ont commencé à fonctionner correctement - alors pourquoi le retard?

Code

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

Enregistrement de taxonomie personnalisée

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' );
anu
la source
1
vous avez d'abord vidé les réécritures en visitant la page des permaliens et en enregistrant?
Milo
@milo - yup. Fait intéressant, après avoir quitté pendant une heure, puis revenir, les jolies travail « » permaliens sont maintenant - je vais mettre à jour la question et le cadre comme un « pourquoi le retard »
anu
Utilisez-vous un plugin de mise en cache? Cela fonctionne-t-il plus rapidement avec tous les autres plugins désactivés? (Il suffit d'éliminer les suspects habituels)
Jan Fabry
@jan - pas de plugin de mise en cache. Le problème est que je ne peux pas reproduire ce comportement - cela s'est produit plusieurs fois maintenant et disparaît après, mais sans action spécifique (que je peux dire) pour le corriger.
anu

Réponses:

7

Utilisez la fonction flush_rewrite_rules () pour définir de nouvelles règles de réécriture, mais pas avec votre code sur init-hook, uniquement sur le plugin d'activation ou le thème! Voir plus dans mon article: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Vider les règles uniquement sur l'activation (et la désactivation). Ne le faites pas sur un autre crochet.

register_activation_hook()
bueltge
la source
4

Allez simplement dans Paramètres> Permaliens pour flasher les règles. Aucun code n'est nécessaire. Vous n'avez pas besoin de mettre à jour la structure, il suffit d'ouvrir cette page d'administration pour faire le travail

Jukov
la source
mais vous devez ensuite visiter cette page chaque fois qu'une erreur se produit. En utilisant flush_rewrite_rules (); fonction signifie qu'ils sont vidés sans réel besoin d'interaction.
Alex Older