Permalinks/Reescritura de Custom Post Type no funcionan inmediatamente

17 jul 2011, 17:39:59
Vistas: 17.3K
Votos: 10

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

¿primero has actualizado las reglas de reescritura visitando la página de enlaces permanentes y guardando?

Milo Milo
17 jul 2011 18:26:29

@milo - sí. Curiosamente, después de alejarme por una hora y luego regresar, los 'enlaces permanentes bonitos' ahora están funcionando - actualizaré la pregunta y la enmarcaré como un 'por qué el retraso'

anu anu
17 jul 2011 18:33:15

¿Utilizas un plugin de caché? ¿Funciona más rápido con todos los demás plugins desactivados? (Solo para descartar los sospechosos habituales)

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

@jan - sin plugin de caché. El problema es que no puedo reproducir este comportamiento - ha ocurrido un par de veces ahora y desaparece después pero sin ninguna acción específica (que yo pueda notar) para solucionarlo realmente.

anu anu
19 jul 2011 16:42:18
Todas las respuestas a la pregunta 2
1

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()
18 jul 2011 22:49:25
Comentarios

También puedes ir a "Ajustes => Enlaces permanentes" y simplemente hacer clic en guardar sin cambiar necesariamente nada. Los enlaces permanentes también se regeneran en ese caso.

Ken Ken
19 nov 2020 15:46:04
1

Solo ve a Ajustes>Enlaces permanentes para actualizar las reglas. No se necesita código. No necesitas actualizar la estructura, con solo abrir esa página de administración se realiza el trabajo

6 nov 2011 16:39:00
Comentarios

pero luego tienes que visitar esa página cada vez que ocurre un error. Al usar la función flush_rewrite_rules(); significa que se vacían sin necesidad real de interacción.

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