Permalinks/Reescritura de Custom Post Type no funcionan inmediatamente
Me encuentro atascado con lo siguiente:
Tengo:
- 1 tipo de entrada personalizado (CPT) llamado
cpt_community
- 1 taxonomía personalizada llamada
tax_community
Si configuro 'rewrite' => true
en el registro de mi CPT, los permalinks a una entrada de este CPT son del tipo http://<dominio>/cpt_community/test_item/
, y obtengo un error 404 al acceder.
Si configuro 'rewrite' => false
, los permalinks son http://<dominio>/?cpt_community=test_item/
, y esto funciona correctamente.
Obviamente estoy haciendo algo mal/estúpido - la pregunta es, ¿qué?
[Actualización]
- Después de cada cambio, estoy limpiando las reglas yendo a Ajustes > Enlaces permanentes (y guardando)
- Después de dejar todo sin tocar durante una hora, las cosas comenzaron a funcionar correctamente - ¿por qué el retraso?
Código
Registro del CPT
function community_post_type() {
// Etiquetas para el CPT
$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')
);
// Registrar el CPT
register_post_type('cpt_community', $args);
}
add_action( 'init', 'community_post_type' );
Registro de Taxonomía Personalizada
function community_tax_type() {
// Registrar la taxonomía
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')
)
);
// Permitir a roles añadir términos de taxonomía al 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' );
Utiliza la función flush_rewrite_rules() para establecer nuevamente las reglas de reescritura, pero no con tu código en el hook init, ¡solo en la activación del plugin o tema! Más información en mi post: http://wpengineer.com/2044/custom-post-type-and-permalink/
global $wp_rewrite;
$wp_rewrite->flush_rules();
Vacía las reglas solo en la activación (y desactivación). No lo hagas en ningún otro hook.
register_activation_hook()
