Benutzerdefinierter Beitragstyp Permalink / Rewrite funktioniert nicht sofort


9

Schlagen einer Mauer mit folgendem:

Ich habe:

  • 1 benutzerdefinierter Beitragstyp aufgerufen cpt_community
  • 1 benutzerdefinierte Taxonomie aufgerufen tax_community

Wenn ich 'rewrite' => truein meiner CPT-Registrierung festgelegt habe, haben Permalinks zu einem Eintrag für dieses CPT die Form von http://<domain>/cpt_community/test_item/und ich erhalte beim Surfen eine 404.

Wenn ich setze 'rewrite' => false, sind es Permalinks http://<domain>/?cpt_community=test_item/, und das funktioniert gut.

Also mache ich offensichtlich etwas falsch / dumm - die Frage ist, was?

[Aktualisieren]

  • Nach jeder Änderung lösche ich die Regeln, indem ich zu Einstellungen> Permalinks gehe (und speichere).
  • Nachdem Sie eine Stunde lang alles in Ruhe gelassen haben, haben die Dinge richtig funktioniert - warum also die Verzögerung?

Code

CPT-Registrierung

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

Benutzerdefinierte Taxonomie-Registrierung

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
Sie haben zuerst das Umschreiben gelöscht, indem Sie die Permalink-Seite besucht und gespeichert haben?
Milo

@milo - yup. Interessanterweise nach einer Stunde zu Fuß entfernt und dann wieder kommen, die ‚ziemlich Permalinks‘ arbeite jetzt - ich werde die Frage aktualisieren und es als Rahmen ‚ warum die Verzögerung‘
Anu

Verwenden Sie ein Caching-Plugin? Funktioniert es schneller mit allen anderen deaktivierten Plugins? (Nur die üblichen Verdächtigen aus dem Weg
Jan Fabry

@jan - kein Caching Plugin. Das Problem ist, dass ich dieses Verhalten nicht reproduzieren kann - es ist jetzt ein paar Mal passiert und verschwindet danach, aber ohne spezifische Maßnahmen (die ich erkennen kann), um es tatsächlich zu beheben.
Anu

Antworten:


7

Verwenden Sie die Funktion flush_rewrite_rules (), um die Umschreiberegeln neu festzulegen, jedoch nicht mit Ihrem Code auf init-hook, sondern nur auf dem Aktivierungs-Plugin oder -Thema! Weitere Informationen finden Sie in meinem Beitrag: http://wpengineer.com/2044/custom-post-type-and-permalink/

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

Spülregeln nur bei Aktivierung (und Deaktivierung). Mach es nicht an einem anderen Haken.

register_activation_hook()

4

Gehen Sie einfach zu Einstellungen> Permalinks, um die Regeln zu flashen. Es wird kein Code benötigt. Sie müssen die Struktur nicht aktualisieren, nur das Öffnen dieser Administrationsseite erledigt den Job


Sie müssen diese Seite dann jedoch jedes Mal besuchen, wenn ein Fehler auftritt. Mit den flush_rewrite_rules (); Funktion bedeutet, dass sie ohne wirklichen Interaktionsbedarf gespült werden.
Alex Older
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.