Probleme cu Permalink-ul / Rewrite pentru Custom Post Type care nu funcționează imediat

17 iul. 2011, 17:39:59
Vizualizări: 17.3K
Voturi: 10

Am întâmpinat o problemă cu următoarele:

Am:

  • 1 Custom Post Type numit cpt_community
  • 1 taxonomie personalizată numită tax_community

Dacă setez 'rewrite' => true în înregistrarea CPT-ului, atunci permalink-urile către o intrare pentru acest CPT sunt de forma http://<domain>/cpt_community/test_item/, și primesc eroare 404 când încerc să le accesez.

Dacă setez 'rewrite' => false, atunci permalink-urile sunt http://<domain>/?cpt_community=test_item/, și acest lucru funcționează corect.

Deci, evident fac ceva greșit - întrebarea este, ce anume?

[Actualizare]

  • După fiecare modificare am resetat regulile mergând la Settings > Permalinks (și salvând)
  • După ce am lăsat totul așa timp de o oră, lucrurile au început să funcționeze corect - deci de ce întârzierea?

Cod

Înregistrarea 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' );

Înregistrarea Taxonomiei Personalizate

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')
       )
   );
   # permitem rolurilor să adauge taguri la taxonomia community pentru 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
Comentarii

ai reîmprospătat mai întâi rewrite-urile vizitând pagina de permalink-uri și salvând?

Milo Milo
17 iul. 2011 18:26:29

@milo - da. Interesant, după ce m-am îndepărtat pentru o oră și apoi m-am întors, 'pretty permalinks' funcționează acum - voi actualiza întrebarea și o voi formula ca 'de ce întârzierea'

anu anu
17 iul. 2011 18:33:15

Folosești un plugin de caching? Funcționează mai rapid cu toate celelalte plugin-uri dezactivate? (Doar eliminând suspectele obișnuite)

Jan Fabry Jan Fabry
19 iul. 2011 00:21:37

@jan - fără plugin de caching. Problema este că nu pot reproduce acest comportament - s-a întâmplat de câteva ori până acum și apoi dispare, dar fără nicio acțiune specifică (din câte îmi dau seama) care să rezolve efectiv problema.

anu anu
19 iul. 2011 16:42:18
Toate răspunsurile la întrebare 2
1

Folosește funcția flush_rewrite_rules() pentru a seta din nou regulile de rescriere, dar nu în codul tău pe hook-ul init, doar la activarea pluginului sau a temei! Vezi mai multe în postarea mea: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Resetează regulile doar la activare (și dezactivare). Nu face acest lucru pe orice alt hook.

register_activation_hook()
18 iul. 2011 22:49:25
Comentarii

De asemenea, poți merge la "setări => legături permanente" și doar să dai clic pe salvare fără a schimba neapărat nimic. Legăturile permanente se regenerează și în acest caz.

Ken Ken
19 nov. 2020 15:46:04
1

Pur și simplu accesează Setări>Legături permanente pentru a reîmprospăta regulile. Nu este nevoie de cod. Nu trebuie să actualizezi structura, doar deschiderea acelei pagini de administrare face treaba.

6 nov. 2011 16:39:00
Comentarii

dar atunci trebuie să vizitezi acea pagină de fiecare dată când apare o eroare. Folosirea funcției flush_rewrite_rules(); înseamnă că acestea sunt resetate fără a fi nevoie de interacțiune.

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