Permalink / Rewrite del Custom Post Type non funziona immediatamente

17 lug 2011, 17:39:59
Visualizzazioni: 17.3K
Voti: 10

Mi sto scontrando con il seguente problema:

Ho:

  • 1 custom post type chiamato cpt_community
  • 1 tassonomia personalizzata chiamata tax_community

Se imposto 'rewrite' => true nella registrazione del CPT, i permalink per un elemento di questo CPT sono nella forma http://<dominio>/cpt_community/test_item/, ma ottengo un errore 404 quando ci accedo.

Se imposto 'rewrite' => false, i permalink diventano http://<dominio>/?cpt_community=test_item/ e questo funziona correttamente.

Ovviamente sto facendo qualcosa di sbagliato/stupido - la domanda è: cosa?

[Aggiornamento]

  • Dopo ogni modifica sto svuotando le regole andando in Impostazioni > Permalink (e salvando)
  • Dopo aver lasciato tutto invariato per un'ora, le cose hanno iniziato a funzionare correttamente - perché questo ritardo?

Codice

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

Registrazione tassonomia personalizzata

function community_tax_type() {
  register_taxonomy(
    'tax_community',
    'cpt_community',
     array( 'hierarchical' => false,
       'label' => 'Tipo di contenuto community',
       'show_ui' => true,
       'query_var' => true,
       'rewrite' => true,
       'singular_label' => 'Tipo di contenuto community',
       'capabilities' => array('assign_terms' => 'edit_community_tags')
       )
   );
   # permetto ai ruoli di aggiungere tag della tassonomia community a un CPT community
   $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' );
4
Commenti

hai prima effettuato il flush delle rewrite visitando la pagina dei permalink e salvando?

Milo Milo
17 lug 2011 18:26:29

@milo - sì. Curiosamente, dopo essermi allontanato per un'ora e poi tornato, i 'pretty permalinks' ora funzionano - aggiornerò la domanda e la formulerò come un 'perché il ritardo'

anu anu
17 lug 2011 18:33:15

Usi un plugin di caching? Funziona più velocemente con tutti gli altri plugin disabilitati? (Sto solo escludendo i soliti sospetti)

Jan Fabry Jan Fabry
19 lug 2011 00:21:37

@jan - nessun plugin di caching. Il problema è che non riesco a riprodurre questo comportamento - è successo un paio di volte ora e poi scompare, ma senza nessuna azione specifica (che io sappia) che lo risolva effettivamente.

anu anu
19 lug 2011 16:42:18
Tutte le risposte alla domanda 2
1

Utilizza la funzione flush_rewrite_rules() per reimpostare le regole di riscrittura, ma non nel tuo codice sull'hook init, solo durante l'attivazione del plugin o del tema! Maggiori dettagli nel mio post: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Svuota le regole solo durante l'attivazione (e disattivazione). Non farlo su nessun altro hook.

register_activation_hook()
18 lug 2011 22:49:25
Commenti

Potresti anche andare su "Impostazioni => Permalink" e semplicemente cliccare su salva senza necessariamente cambiare nulla. I permalink verranno rigenerati anche in questo caso.

Ken Ken
19 nov 2020 15:46:04
1

Vai semplicemente su Impostazioni>Permalink per aggiornare le regole. Non è necessario alcun codice. Non devi aggiornare la struttura, basta aprire quella pagina di amministrazione per fare il lavoro

6 nov 2011 16:39:00
Commenti

ma poi dovresti visitare quella pagina ogni volta che si verifica un errore. Utilizzando la funzione flush_rewrite_rules(); significa che vengono aggiornate senza alcuna necessità di interazione.

Alex Older Alex Older
26 mar 2012 16:41:46