Ich habe einen benutzerdefinierten Beitragstyp erstellt, dessen (vereinfachte) Argumente sind:
register_post_type(
'Event',
'public' => true,
'rewrite' => array( 'slug' => 'eventy'),
'has_archive' => false,
'hierarchical' => false
)
Es funktioniert im Allgemeinen gut. Wenn ich jedoch versuche, die URLs neu zu schreiben functions.php
, zum Beispiel:
function my_post_type_link_filter_function( $post_link, $id = 0, $leavename = FALSE ) {
return str_replace('eventy', 'eventx', $post_link);
}
add_filter('post_type_link', 'my_post_type_link_filter_function', 1, 3);
Das Ergebnis ist, dass die neuen 'eventx'-URLs in von WordPress generierten Links, Listen usw. korrekt angezeigt werden. Wenn ich jedoch zu diesen 'eventx'-URLs gehe, erhalte ich eine 404. Das Wechseln zu einer' eventy'-URL funktioniert immer noch.
Ich habe viele Male versucht, die Permalink-Einstellungen auf Standard und zurück auf den Post-Namen zu ändern. Dies soll Permalinks zurücksetzen und dieses Problem für viele Leute beheben, die ich online gesehen habe. Nicht für mich.
Weiß jemand, was die Ursache sein könnte? Wie gehe ich bei der Fehlerbehebung vor? Ich bin schwach in der Theorie des URL-Umschreibens.
Wenn Sie interessiert sind, ist mein Zweck nicht die oben erwähnte triviale eventy → eventx-Substitution. Ich möchte tatsächlich das Jahr / den Monat, in dem ein Ereignis beginnt (nicht als es veröffentlicht wurde), in seine URL einfügen. Durch das Debuggen wurde mir klar, dass ich ein grundlegenderes Problem hatte, da selbst dieses triviale x → y-Umschreiben immer noch 404s auslöst.
Danke fürs Lesen!
[Klarstellung hinzugefügt]
Im Moment habe ich drei Ereignisse (Beiträge in meinem benutzerdefinierten Beitragstyp) mit dem Namen "Angelausflug" gesagt. Diesen werden standardmäßig Permalinks wie zugewiesen
- mysite.com/events/fishing-trip
- mysite.com/events/fishing-trip-2
- mysite.com/events/fishing-trip-3
Welches ist langweilig und unelegant.
Ich will stattdessen
- mysite.com/events/2013/january/fishing-trip
- mysite.com/events/2013/may/fishing-trip
- mysite.com/events/2013/may/fishing-trip-2
- mysite.com/events/2014/march/fishing-trip
Schöner und informativer.
Ich bin nicht daran interessiert, Seiten im Kategoriestil zu haben
- mysite.com/events/2013
Das Jahr und der Monat sind in der URL nur kosmetisch.
'post_type_link'
werden einfach die URLs geändert, die WordPress generiert, wenn ein Permalink für Ihren Beitragstyp ausgegeben wird. Wenn Sie eine dieser URLs besuchen, weiß WordPress nicht, was mit ihnen zu tun ist oder worauf sie verweisen sollen, da Sie nichts unternommen haben, um Umschreiberegeln für eingehende Anforderungen zu generieren. Ohne zu wissen, welches Format Sie für Ihre Links wünschen, ist es nicht möglich, eine Antwort zu geben, die Sie nicht aufadd_rewrite_rule
und verweistadd_rewrite_tag
.Antworten:
Schritt 1: Fügen Sie die Umschreibetags für benutzerdefinierte Abfragevariablen für Ereignisjahr und -monat hinzu und registrieren Sie dann den Ereignisposttyp mit diesen Tags im Slug-Argument des Umschreibearguments:
In Schritt 2 filtern Sie den Beitragstyp-Link, um diese Tags durch Werte aus benutzerdefinierten Feldern
event_year
und zu ersetzenevent_month
. Wenn die benutzerdefinierten Felder nicht vorhanden sind, werden einige Standardwerte eingefügt, sodass Sie zumindest eine Vorschau eines Beitrags ohne Fehler anzeigen können:quelle
Sie müssen 'rewrite' => false in Ihrem register_post_type () setzen; und nach dem Schließen von register_post_type () hinzufügen:
Wo projet ist mein CPT.
Sie können hier für mehr überprüfen .
quelle