El tipo de publicación personalizada Permalink / Rewrite no funciona de inmediato


9

Golpear una pared de ladrillos con lo siguiente:

Yo tengo:

  • 1 tipo de publicación personalizada llamada cpt_community
  • 1 taxonomía personalizada llamada tax_community

Si configuro 'rewrite' => truemi registro de CPT, entonces los enlaces permanentes a una entrada para este CPT tienen la forma de http://<domain>/cpt_community/test_item/, y obtengo un 404 cuando lo busco.

Si configuro 'rewrite' => false, entonces los enlaces permanentes son http://<domain>/?cpt_community=test_item/, y esto funciona bien.

Entonces, obviamente estoy haciendo algo mal / estúpido, la pregunta es, ¿qué?

[Actualizar]

  • Después de cada cambio, estoy limpiando las reglas yendo a Configuración> Enlaces permanentes (y guardando)
  • Después de dejar todo solo durante una hora, las cosas comenzaron a funcionar correctamente, entonces, ¿por qué la demora?

Código

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

Registro de taxonomía personalizada

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
¿Has reescrito primero al visitar la página de enlaces permanentes y guardar?
Milo

@milo - sí. Curiosamente, después de alejarse durante una hora y luego regresar, los 'enlaces permanentes' ahora están funcionando: actualizaré la pregunta y la enmarcaré como 'por qué la demora'
anu

¿Utiliza un complemento de almacenamiento en caché? ¿Funciona más rápido con todos los demás complementos desactivados? (Simplemente quitando a los sospechosos habituales)
Jan Fabry

@jan: sin plugin de almacenamiento en caché. El problema es que no puedo reproducir este comportamiento: ha sucedido un par de veces ahora y desaparece después, pero sin ninguna acción específica (que pueda decir) para solucionarlo.
anu

Respuestas:


7

Use la función flush_rewrite_rules () para establecer nuevas reglas de reescritura, pero no con su código en init-hook, ¡solo en el complemento o tema de activación! Ver más en mi publicación: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Las reglas de descarga solo se activan (y desactivan). No lo hagas con ningún otro gancho.

register_activation_hook()

4

Simplemente vaya a Configuración> Enlaces permanentes para actualizar las reglas. No se necesita código. No necesita actualizar la estructura, solo abrir esa página de administrador hace el trabajo


pero luego debe visitar esa página cada vez que se produce un error. Mediante el uso de flush_rewrite_rules (); La función significa que se sonrojan sin necesidad real de interacción.
Alex Older
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.