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

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()

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.