Benutzerdefinierter Post-Typ-Archivierungsregel für jedes Jahr

Es gibt ähnliche Fragen, aber ich habe keine gute Antwort gefunden. Ich habe einen benutzerdefinierten Post-Typ “Enews”, der folgendermaßen registriert wird:

[...] 'hierarchical' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'enews'), [...] 

Fast alle Links funktionieren gut:

/en/enews/ -> OK. geht zum allgemeinen post_type Archiv. “en” ist die Sprache.

/en/enews/2012/post-slug -> Fast OK (oder fast falsch ..). Geht zum einzelnen post_type, aber es wird automatisch nach /en/enews/post-slug umgeleitet

/en/enews/2012/ – >>> FALSCH. Seite nicht gefunden. Also habe ich das geschrieben:

 add_action('generate_rewrite_rules', 'add_rewrite_rules'); function add_rewrite_rules($wp_rewrite){ if(is_admin()) return; $new_rules['(it|en|fr|es|de)/enews/([0-9]{4})?$'] = 'index.php?post_type=enews&lang=$matches[1]&year=$matches[2]'; $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; }// end add rewrite urls 

Ich habe alle Regeln gelöscht, sowohl per Code als auch manuell vom Permalink-Administrator. Die Seite wurde noch nicht gefunden. Derzeit mit Polylang Pro, aber es sollte keine Probleme geben. Ich habe auch $wp_rewrite->rules überprüft, sie scheinen in $wp_rewrite->rules , meine neuen Regeln werden korrekt vor allen anderen geschrieben.

Was mache ich falsch?

Im Grunde ist die Sache, dass, wenn ich einen Blick auf die wp_query Abfrage vars unter /en/enews/2012/ , ich folgendes finde:

 array(67) { ["page"]=> int(0) ["lang"]=> string(2) "en" ["enews"]=> string(4) "2012" ["post_type"]=> string(5) "enews" ["name"]=> string(4) "2012" ["year"]=> int(0) 

Es liest also falsch für “enews”, “name” und “year”. Alles falsch.

BEARBEITEN:

Ich habe eine seltsame Lösung gefunden, aber ich kann immer noch nicht verstehen, warum es so funktionieren sollte.

Wenn ich die Regel unter init hinzufüge (und das zuvor unter generate_rewrite_rules hinzugefügte /en/enews/2012/ entfernt), wird /en/enews/2012/ funktionieren:

 add_action('init', 'add_custom_rewrites'); function add_custom_rewrites(){ add_rewrite_rule( 'enews/([0-9]{4})/?$', 'index.php?post_type=enews&year=$matches[1]', 'top' ); } 

Wie auch immer, /en/enews/2012/post-slug wird immer noch nach /en/enews/post-slug redirect

ABER, wenn ich hinzufüge

$new_rules['(it|en|fr|es|de)/enews/([0-9]{4})/(.+)/?$'] = 'index.php?post_type=enews&lang=$matches[1]&year=$matches[2]&name=$matches[3]';

zu der obigen ‘generate_rewrite_rules’-Aktion wird /en/enews/post-slug funktionieren.

Also brauche ich anscheinend eine Regel unter ‘init’ für das Jahresarchiv und eine Regel unter ‘generate_rewrite_rules’ für die einzelne post-URL. Warum???

Solutions Collecting From Web of "Benutzerdefinierter Post-Typ-Archivierungsregel für jedes Jahr"