benutzerdefinierte Post-Typen, wp_get_archives und add_rewrite_rule

Ich habe gesucht, um zu sehen, ob jemand eine Lösung für ein eigenartiges Problem gefunden hat, aber ich habe nichts gefunden, was nahe an dem war, was in meinem Fall passierte.

Ich habe zwei benutzerdefinierte Post-Typen – nennen wir sie Tagebuch und Journal. Beide wurden korrekt mit has_archive auf true gesetzt , mit einem Slug mit dem gleichen Namen und with_front to false umgeschrieben .

Meine Permalink-Struktur ist mit Jahr / Monat / Post-Name festgelegt . Ich habe Platzhalter-Seiten eingerichtet, mit den Slugs “Tagebuch” und “Tagebuch” für jeden, so dass alle Beiträge, die ich an beiden Typen mache, gut mit archive.php geladen werden – also wenn ich zu Domain / Tagebuch / oder Domain / Journal gehe entsprechend aufladen. Ich mache hier keine zusätzlichen Templates – einfach ein Childthema von twentyleven erstellen und archive.php verwenden.

Ich musste die wp_get_archives verwenden , um mit den benutzerdefinierten Post-Typen zu arbeiten, und habe mit der hinzugefügten Option post_type gearbeitet . Ich habe einen Schritt weiter gegangen und eine custom_wp_get_archives- function erstellt, damit ich die Ausgabe anpassen kann, wie ich sie später brauchen werde.

Hier beginnt nun das Problem, entweder mit dem Standard- wp_get_archive mit der hinzugefügten * post_type * -Option oder mit custom_wp_get_archives – die URL, die von entweder domain / year / month ausgegeben wird, gibt einen 404 zurück, wenn ich dorthin gehe. Fair genug, aber wenn ich “? Post_type = POST_TYPE” zu dieser / jeder URL hinzufüge, die ich erhalte, bekomme ich die entsprechenden Ergebnisse – fairerweise wieder.

Also habe ich meine custom_wp_get_archives verwendet , um “? Post_type = POST_TYPE” in die Ausgabe-URL einzufügen und das hat funktioniert.

Meine Frage ist – gibt es eine Möglichkeit, wp_get_archives zu bekommen, um die korrekten URLs mit den oben genannten Bedingungen auszugeben?

Ich habe auch in add_rewrite_rule sowie generate_rewrite_rules als Fix – dh: domain / post_type_slug / Jahr / Monat – und folgte fast jedem Beispiel, das ich hier und an anderen Orten gefunden habe und es funktioniert einfach nicht. Ich habe auch die Permalinks gespült – nein.

Der Code, den ich gefunden habe, der nahe an dem zu sein scheint, was ich mit dem Umschreiben der Regeln tun möchte, funktioniert auch hier nicht:

function register_post_type_rewrite_rules($wp_rewrite) { $args = array('public' => true, '_builtin' => false); //get all public custom post types $output = 'names'; $operator = 'and'; $post_types = get_post_types($args,$output,$operator); $url_base = ($url_base == '') ? $url_base : $url_base . '/'; $custom_rules = array(); $post_types = implode('|', $post_types); $custom_rules = array( "$url_base($post_types)/([0-9]+)/([0-9]{1,2})/([0-9]{1,2})/?$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3) . '&day=' . $wp_rewrite->preg_index(4), //year month day "$url_base($post_types)/([0-9]+)/([0-9]{1,2})/?$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2) . '&monthnum=' . $wp_rewrite->preg_index(3), //year month "$url_base($post_types)/([0-9]+)/?$" => 'index.php?post_type_index=1&post_type=' . $wp_rewrite->preg_index(1) . '&year=' . $wp_rewrite->preg_index(2) //year ); $wp_rewrite->rules = array_merge($custom_rules, $wp_rewrite->rules); // merge existing rules with custom ones return $wp_rewrite; } add_filter('generate_rewrite_rules', 'register_post_type_rewrite_rules', 100); 

Jeder Hinweis darauf wird groß sein.

Solutions Collecting From Web of "benutzerdefinierte Post-Typen, wp_get_archives und add_rewrite_rule"

Benutzerdefinierte Post-Typen haben standardmäßig keine datumsbasierten Archive (womit ich wirklich meine, dass sie keine Permalink-Strukturen für ihre Date-Archive haben). Beispielsweise:

 www.example.com?post_type=journal&year=2012&monthnum=4 

sollte Ihnen das Archiv der Zeitschriften geben, die im April 2012 veröffentlicht wurden. Jedoch

 www.example.com/journal/2012/04 

wird Ihnen wahrscheinlich 404 geben, weil es nicht als Regel zum erneuten Schreiben existiert. Sie müssen sie hinzufügen:

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

gibt Ihnen die Monats- und Jahresarchive. ( Bitte beachten Sie, dass das oben Genannte nicht getestet wurde ). Sie müssen die Rewrite-Regeln nach dem Hinzufügen einmal löschen (unter Einstellungen> Permalink).