Permalink / Rewrite del Custom Post Type non funziona immediatamente
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' );
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()
