Ich weiß, die Leute haben das schon einmal gefragt und sind so weit gegangen, den benutzerdefinierten Post-Typ hinzuzufügen und für den Permalink umzuschreiben.
Das Problem ist, dass ich 340 vorhandene Kategorien habe, die ich weiterhin verwenden möchte. Früher konnte ich / category / subcategory / postname sehen
Jetzt habe ich den Slug von customposttype / postname. Das Auswählen der Kategorie wird nicht mehr im Permalink angezeigt ... Ich habe die Permalink-Einstellung in admin nicht in etwas anderes geändert.
Gibt es etwas, das mir fehlt oder das ich diesem Code hinzufügen muss?
function jcj_club_post_types() {
register_post_type( 'jcj_club', array(
'labels' => array(
'name' => __( 'Jazz Clubs' ),
'singular_name' => __( 'Jazz Club' ),
'add_new' => __( 'Add New' ),
'add_new_item' => __( 'Add New Jazz Club' ),
'edit' => __( 'Edit' ),
'edit_item' => __( 'Edit Jazz Clubs' ),
'new_item' => __( 'New Jazz Club' ),
'view' => __( 'View Jazz Club' ),
'view_item' => __( 'View Jazz Club' ),
'search_items' => __( 'Search Jazz Clubs' ),
'not_found' => __( 'No jazz clubs found' ),
'not_found_in_trash' => __( 'No jazz clubs found in Trash' ),
'parent' => __( 'Parent Jazz Club' ),
),
'public' => true,
'show_ui' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'menu_position' => 5,
'query_var' => true,
'supports' => array(
'title',
'editor',
'comments',
'revisions',
'trackbacks',
'author',
'excerpt',
'thumbnail',
'custom-fields',
),
'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ),
'taxonomies' => array( 'category','post_tag'),
'can_export' => true,
)
);
Antworten:
Es gibt zwei Angriffspunkte, die beim Hinzufügen benutzerdefinierter Umschreiberegeln für Beitragstypen abgedeckt werden müssen:
Regeln umschreiben
Dies geschieht, wenn die Umschreiberegeln in
wp-includes/rewrite.php
in generiert werdenWP_Rewrite::rewrite_rules()
. Mit WordPress können Sie die Umschreiberegeln für bestimmte Elemente wie Beiträge, Seiten und verschiedene Arten von Archiven filtern. Wo Sieposttype_rewrite_rules
dasposttype
Teil sehen, sollte der Name Ihres benutzerdefinierten Beitragstyps sein. Alternativ können Sie denpost_rewrite_rules
Filter verwenden, solange Sie nicht auch die Standard-Post-Regeln außer Kraft setzen.Als nächstes benötigen wir die Funktion, um die Umschreiberegeln zu generieren:
Die wichtigste Sache, auf die Sie achten sollten, wenn Sie herumspielen möchten, ist der Boolesche Wert "Walk directorys". Es generiert Überschreibungsregeln für jedes Segment einer Permastruktur und kann Überschreibungsregelinkongruenzen verursachen. Wenn eine WordPress-URL angefordert wird, wird das Array mit den Umschreiberegeln von oben nach unten überprüft. Sobald ein Match gefunden wird, wird es geladen, was auch immer es gefunden hat, zum Beispiel wenn Ihr Permastruct ein gieriges Match hat, z. for-
/%category%/%postname%/
und walk-Verzeichnisse geben Umschreibregeln für/%category%/%postname%/
UND aus,/%category%/
die mit allen übereinstimmen. Wenn das zu früh passiert, bist du fertig.Permalinks
Dies ist die Funktion, die die Permalinks des Post-Typs analysiert und ein Permastruct (z. B. '/% year% /% monthnum% /% postname% /') in eine tatsächliche URL konvertiert.
Der nächste Teil ist ein einfaches Beispiel für eine Version der
get_permalink()
Funktion inwp-includes/link-template.php
. Es werden benutzerdefinierte Post-Permalinks generiert, vonget_post_permalink()
denen eine stark verwässerte Version von istget_permalink()
.get_post_permalink()
wird durch gefiltert,post_type_link
so dass wir das verwenden, um eine benutzerdefinierte Permastruktur zu erstellen.Wie bereits erwähnt, handelt es sich um einen sehr vereinfachten Fall zum Generieren eines benutzerdefinierten Regelsatzes und von Permalinks für das Neuschreiben. Er ist nicht besonders flexibel, sollte jedoch ausreichen, um den Einstieg zu erleichtern.
Betrug
Ich habe ein Plugin geschrieben, mit dem Sie Permastrukturen für jeden benutzerdefinierten Beitragstyp definieren können, aber wie Sie es
%category%
in der Permalink-Struktur für Beiträge verwenden können, die mein Plugin%custom_taxonomy_name%
für alle benutzerdefinierten Taxonomien unterstützt, die Sie auch haben, wobeicustom_taxonomy_name
der Name Ihrer Taxonomie z.%club%
.Es funktioniert wie erwartet mit hierarchischen / nicht hierarchischen Taxonomien.
http://wordpress.org/extend/plugins/wp-permastructure/
quelle
$permalink = home_url(...
von überschrieben$permalink = user_trailingslashit(...
und nie benutzt. Oder vermisse ich etwas?$post_link
ist nicht einmal definiert. War es sein soll$permalink = user_trailingslashit( $permalink, 'single' );
?$permalink
nicht sein$post_link
. Prost :)Habe die Lösung!
Um hierarchische Permalinks für benutzerdefinierten Post-Typ zu erhalten, installieren Sie das Plugin für benutzerdefinierte Post-Typ-Permalinks ( https://wordpress.org/plugins/custom-post-type-permalinks/ ).
Aktualisieren Sie den Typ des registrierten Beitrags. Ich habe den Namen des Beitragstyps als Hilfezentrale
Und hier ist Taxonomie registriert
Diese Zeile bewirkt, dass Ihr Permalink funktioniert
Sie können entfernen
%post_id%
und behalten/%help_centre_category%/%postname%/"
Vergessen Sie nicht, die Permalinks aus dem Dashboard zu entfernen.
quelle
Ich habe eine LÖSUNG gefunden !!!
(Nach endlosen Recherchen ... kann ich CUSTOM POST TYPE Permalinks haben wie:
example.com/category/sub_category/my-post-name
hier der code (in functions.php oder plugin):
quelle
Sie haben mehrere Fehler mit Ihrem Code. Ich habe Ihren vorhandenen Code aufgeräumt:
Ersetzen Sie Ihren Code durch den obigen Code und prüfen Sie, ob er funktioniert. Antworte mir, wenn du weitere Fragen hast und ich versuche zu helfen.
BEARBEITEN:
Mir ist aufgefallen, dass ich ausgelassen habe
'has_archive' => true
.quelle