Hinzufügen einer Kategoriebasis zur URL in einem benutzerdefinierten Beitragstyp / einer benutzerdefinierten Taxonomie
-
-
Vor kurzem habeich dieses Problem.** Gelöst! ** [# 188834] [1] [1]: http://wordpress.stackexchange.com/questions/94817/add-category-base-to-url-in-custom-post-type-taxonomy/188834#188834Recently, I face this issue. **Solved!** [#188834][1] [1]: http://wordpress.stackexchange.com/questions/94817/add-category-base-to-url-in-custom-post-type-taxonomy/188834#188834
- 0
- 2015-05-20
- maheshwaghmare
-
** LÖSUNG! ** (Nachendloser Recherche)
Sie sollten den Filter `post_type_link` ändern.mehr unter: http://wordpress.stackexchange.com/a/167992/33667)**SOLUTION!** (After endless research)
you should modify the `post_type_link` filter. more at: http://wordpress.stackexchange.com/a/167992/33667 )- 0
- 2015-07-26
- T.Todua
-
Mögliches Duplikat von [Wie ändereich die Permalink-Strukturfür denbenutzerdefinierten Beitragstyp und seine Taxonomien?] (http://wordpress.stackexchange.com/questions/28979/how-to-change-permalink-structure-for-custom-post-type)-und-seine-Taxonomien)possible duplicate of [How to change permalink structure for custom post type and it's taxonomies?](http://wordpress.stackexchange.com/questions/28979/how-to-change-permalink-structure-for-custom-post-type-and-its-taxonomies)
- 0
- 2015-07-26
- T.Todua
-
9 Antworten
- Stimmen
-
- 2013-04-06
Ändern Sie Ihre Umschreibung,um die Kursabfrage var hinzuzufügen:
'rewrite' => array('slug' => 'courses/%course%')
Filtern Sie dann
post_type_link
,um den ausgewählten Kursin den Permalinkeinzufügen:function wpa_course_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) ){ $terms = wp_get_object_terms( $post->ID, 'course' ); if( $terms ){ return str_replace( '%course%' , $terms[0]->slug , $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
Esgibt auch Plugins wie Permalinksfürbenutzerdefinierte Post-Typen ,die diesfür Sietun können.
Change your rewrite to add the course query var:
'rewrite' => array('slug' => 'courses/%course%')
Then filter
post_type_link
to insert the selected course into the permalink:function wpa_course_post_link( $post_link, $id = 0 ){ $post = get_post($id); if ( is_object( $post ) ){ $terms = wp_get_object_terms( $post->ID, 'course' ); if( $terms ){ return str_replace( '%course%' , $terms[0]->slug , $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
There are also plugins like Custom Post Type Permalinks that can do this for you.
-
Vielen Dank,ich schätze Ihre schnelle Antwort.Dasmacht durchaus Sinn.Ichbin allerdingsgespannt,woich den Filterpost_type_linkeinfüge.Kannicheinfach am Ende desgesamten Dokuments stehen?Thank you, I appreciate your swift answer. This makes complete sense. I'm curious though, where do I insert the filter post_type_link at? can i just go at the bottom of the entire document?
- 0
- 2013-04-06
- Zach Russell
-
Ich habees unten hinzugefügt undesist die Seite.I added it to the bottom and it 404's the page.
- 0
- 2013-04-06
- Zach Russell
-
Siemüssen Umschreibungen löschen,besuchen Sie die Seitemit den Permalink-Einstellungen.you have to flush rewrites, visit the permalinks settings page.
- 1
- 2013-04-06
- Milo
-
Beachten Sie auch,dass Sie wahrscheinlicheinen Konfliktmit einer Taxonomie undeinem Post-Typ haben,diebeide dieselbe Schnecketeilen.also note you'll likely have a clash with a taxonomy and a post type both sharing the same slug.
- 0
- 2013-04-06
- Milo
-
Woichgeradebin,machtes die Permalinks richtig,aberes wirdnicht richtig ausgeführt (esist Soft 404ing).Irgendwelche Empfehlungen,wasichtun kann,damit dies richtigfunktioniert?Ichbin weg von den Permalink Flush Rewrites.Klicken Sieeinfach auf "Speichern" und die Datei wird aktualisiert (esist Nginx,so dassesin der Datei "nginx.conf"gesteuert wird).Where i'm at now is it's making the permalinks right, but it's not executing correctly (it's soft 404ing). Any recommendations on what I can do to get this working right? I'm away of the permalink flush rewrites. Just click 'save' and it updates the file (it's nginx so it's controlled in the nginx.conf file)
- 0
- 2013-04-06
- Zach Russell
-
Ich habs!Es warein Konflikt.Got it! It was a conflict.
- 0
- 2013-04-06
- Zach Russell
-
Downvote - Archiv Seite 404Downvote - archive page 404
- 1
- 2020-04-04
- Dev
-
Diesfunktioniertnichtfür übersetzte Beiträge aufeinermehrsprachigen Site (z. B.mit WPML).This doesn't work for translated posts on a multilingual site (for example using WPML).
- 0
- 2020-08-05
- montrealist
-
Dies zeigtfürmich die Startseite derneuerstellten URL.Siemüssen die add_rewrite_rule () verwenden,diein @ Floris 'Antwort zu sehenist,damitesfunktioniert.Beachten Sie auch,dass Archivseitennichtmehrfunktionieren. Icherhalte 404für/my-post-type undfür/my-post-type/my-categoryThis shows frontpage for me on the newly created URL. You gotta use the add_rewrite_rule() seen in @Floris's answer to make it work. Also note, archive pages stop working, I get 404 for /my-post-type and for /my-post-type/my-category
- 0
- 2020-09-01
- trainoasis
-
- 2019-02-11
Die Lösungbestandfürmich aus drei Teilen. Inmeinem Fall heißt der Beitragstyp
trainings
.- Fügen Sie
'rewrite' => array('slug' => 'trainings/%cat%')
zur Funktionregister_post_type
. - Ändern Sie den Slugin eine dynamische Kategorie.
- "Hören" Sie sich dieneue dynamische URL an und laden Sie dieentsprechende Vorlage.
Hiererfahren Sie,wie Sie den Permalinkfüreinen bestimmten Beitragstyp dynamisch ändern. Fügen Sie zu
functions.php
hinzu:function vx_soon_training_post_link( $post_link, $id = 0 ) { $post = get_post( $id ); if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, 'training_cat' ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'vx_soon_training_post_link', 1, 3 );
... und so laden Sie dieentsprechende Vorlagein dieneue dynamische URL. Fügen Sie zu
functions.php
hinzu:function archive_rewrite_rules() { add_rewrite_rule( '^training/(.*)/(.*)/?$', 'index.php?post_type=trainings&name=$matches[2]', 'top' ); //flush_rewrite_rules(); // use only once } add_action( 'init', 'archive_rewrite_rules' );
Dasistes! Denken Sie daran,die Permalinks zu aktualisieren,indem Sie die Permalinkserneutim Backend speichern. Oder verwenden Sie die Funktion
flush_rewrite_rules()
.The solution for me had three parts. In my case the post type is called
trainings
.- Add
'rewrite' => array('slug' => 'trainings/%cat%')
to theregister_post_type
function. - Change the slug to have a dynamic category.
- "Listen" to the new dynamic URL and load the appropriate template.
So here is how to change the permalink dynamically for a given post type. Add to
functions.php
:function vx_soon_training_post_link( $post_link, $id = 0 ) { $post = get_post( $id ); if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, 'training_cat' ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'vx_soon_training_post_link', 1, 3 );
...and this is how to load the appropriate template on the new dynamic URL. Add to
functions.php
:function archive_rewrite_rules() { add_rewrite_rule( '^training/(.*)/(.*)/?$', 'index.php?post_type=trainings&name=$matches[2]', 'top' ); //flush_rewrite_rules(); // use only once } add_action( 'init', 'archive_rewrite_rules' );
Thats it! Remember to refresh the permalinks by saving the permalinks again in de backend. Or use the
flush_rewrite_rules()
function. -
- 2017-10-06
Habe die Lösung!
Um hierarchische Permalinksfürbenutzerdefinierte Beitragstypen zuerhalten,installieren Siebenutzerdefinierte Beitragstyp-Permalinks ( https://wordpress.org/plugins/custom-post-type-permalinks/) Plugin.
Registrierten Beitragstyp aktualisieren. Ich habe den Namen des Beitragstyps als Hilfezentrum
function help_centre_post_type(){ register_post_type('helpcentre', array( 'labels' => array( 'name' => __('Help Center'), 'singular_name' => __('Help Center'), 'all_items' => __('View Posts'), 'add_new' => __('New Post'), 'add_new_item' => __('New Help Center'), 'edit_item' => __('Edit Help Center'), 'view_item' => __('View Help Center'), 'search_items' => __('Search Help Center'), 'no_found' => __('No Help Center Post Found'), 'not_found_in_trash' => __('No Help Center Post in Trash') ), 'public' => true, 'publicly_queryable'=> true, 'show_ui' => true, 'query_var' => true, 'show_in_nav_menus' => false, 'capability_type' => 'page', 'hierarchical' => true, 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/", 'menu_position' => 21, 'supports' => array('title','editor', 'thumbnail'), 'has_archive' => true )); flush_rewrite_rules(); } add_action('init', 'help_centre_post_type');
Und hierist die registrierte Taxonomie
function themes_taxonomy() { register_taxonomy( 'help_centre_category', 'helpcentre', array( 'label' => __( 'Categories' ), 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/", 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'query_var' => true ) ); } add_action( 'init', 'themes_taxonomy');
Mit dieser Zeilefunktioniert Ihr Permalink
"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
Sie können
behalten%post_id%
entfernen und/%help_centre_category%/%postname%/"
Vergessen Sienicht,Permalinks aus dem Dashboard zu löschen.
Got the solution!
To have hierarchical permalinks for custom post type install Custom Post Type Permalinks(https://wordpress.org/plugins/custom-post-type-permalinks/) plugin.
Update registered post type. I have post type name as help center
function help_centre_post_type(){ register_post_type('helpcentre', array( 'labels' => array( 'name' => __('Help Center'), 'singular_name' => __('Help Center'), 'all_items' => __('View Posts'), 'add_new' => __('New Post'), 'add_new_item' => __('New Help Center'), 'edit_item' => __('Edit Help Center'), 'view_item' => __('View Help Center'), 'search_items' => __('Search Help Center'), 'no_found' => __('No Help Center Post Found'), 'not_found_in_trash' => __('No Help Center Post in Trash') ), 'public' => true, 'publicly_queryable'=> true, 'show_ui' => true, 'query_var' => true, 'show_in_nav_menus' => false, 'capability_type' => 'page', 'hierarchical' => true, 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/", 'menu_position' => 21, 'supports' => array('title','editor', 'thumbnail'), 'has_archive' => true )); flush_rewrite_rules(); } add_action('init', 'help_centre_post_type');
And here is registered taxonomy
function themes_taxonomy() { register_taxonomy( 'help_centre_category', 'helpcentre', array( 'label' => __( 'Categories' ), 'rewrite'=> [ 'slug' => 'help-center', "with_front" => false ], "cptp_permalink_structure" => "/%help_centre_category%/", 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'query_var' => true ) ); } add_action( 'init', 'themes_taxonomy');
This is line makes your permalink work
"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
you can remove
%post_id%
and can keep/%help_centre_category%/%postname%/"
Don't forget to flush permalinks from dashboard.
-
- 2015-05-20
Ja! Nach vielen Recherchen habeich das Plugin ' Benutzerdefinierte Permalinks '.Wasmeine Anforderungenerfüllt -benutzerdefinierte URL,z. B.
- für Kategorie
- für Post
- fürbenutzerdefinierte Post
- fürbenutzerdefinierte Taxonomie usw.
Gefälltmir Benutzerdefinierter Beitragstyp - Beitrag :
Yep! After a lot of research I got plugin 'Custom Permalinks'. Which fulfils my requirement regards - custom URL e.g.
- for Category
- for Post
- for Custom Post
- for Custom Taxonomy etc.
Like this Custom Post Type - Post:
-
- 2019-06-12
Siemüssen diefolgende Zeile aktualisieren,wenn Sieeinen benutzerdefinierten Beitragstypmit der Funktion register_post_type registriert haben.
'rewrite'=> Array ('slug'=> 'Kurse/% cat%')
Um den Permalink des Beitragstyps dynamisch zu ändern,müssen Sie denfolgenden Codein die Dateifunctions.phpeinfügen:
function change_link( $post_link, $id = 0 ) { $post = get_post( $id ); if( $post->post_type == 'courses' ) { if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, array('course') ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } } return $post_link ; } add_filter( 'post_type_link', 'change_link', 1, 3 ); //load the template on the new generated URL otherwise you will get 404's the page function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); } add_action( 'init', 'generated_rewrite_rules' );
Danachmüssen Sie Permalinksneu schreiben und zu wp-admin> Einstellungen> Permalinks wechseln. Aktualisieren Sieeinfach die Permalink-Einstellungmit der Schaltfläche "Änderungen speichern".
Es werden URLs wiefolgt zurückgegeben:
- domain.com/courses/[course-name{category}‹/lesson-name
Danke!
You need to update below line at where you have register a custom post type using register_post_type function.
'rewrite' => array('slug' => 'courses/%cat%')
To change permalink dynamically of post type you have to add below code in functions.php file :
function change_link( $post_link, $id = 0 ) { $post = get_post( $id ); if( $post->post_type == 'courses' ) { if ( is_object( $post ) ) { $terms = wp_get_object_terms( $post->ID, array('course') ); if ( $terms ) { return str_replace( '%cat%', $terms[0]->slug, $post_link ); } } } return $post_link ; } add_filter( 'post_type_link', 'change_link', 1, 3 ); //load the template on the new generated URL otherwise you will get 404's the page function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); } add_action( 'init', 'generated_rewrite_rules' );
After that, you need to flush rewrites permalinks, goto the wp-admin > Settings > permalinks. just update permalink setting using "Save Changes" button.
it'll return urls like below :
- domain.com/courses/[course-name{category}]/lesson-name
Thank you!
-
Down Vote - 404füreinzelne CPT- und CTP-ArchivseitentypenDown vote - 404 on both single CPT and CTP archive page types
- 0
- 2020-04-04
- Dev
-
@dev hast du alle Schrittebefolgt,dieichin meiner Antworterwähnt habe?Haben Sie Ihre Rewrite-Permalinksgespült?Ich habegetestet undesfunktioniertgut.@dev did you follow all steps which i have mentioned in my answer ? did you flush your rewrite permalinks? I have tested and it is working fine.
- 0
- 2020-04-04
- Chetan Vaghela
-
- 2017-05-03
Dasfunktioniertbei mir:
'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false, 'hierarchical' => true // to display category/subcategroy ),
This is worked for me :
'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false, 'hierarchical' => true // to display category/subcategroy ),
-
Dabei werden weder die Kategoriennoch deren Pfad verwendet,sondernnur derbenutzerdefinierte Beitragstyp hierarchisch.This does not make use of the categories or their path it only makes the custom post type hierarchical.
- 5
- 2017-08-25
- Joris Kroos
-
- 2019-07-01
Allen,die an der Lösunginteressiert sind,ohne an rohem PHP-Codebasteln zumüssen,empfehleich das Plugin Permalink Manager Lite von Maciej Bis.Esistein Lebensretter.
Es verfügt übereinen visuellen Mechanismus zum Entfernen oder Hinzufügeneinesbeliebigen Teilsin der URL desbenutzerdefinierten Beitragstypsbasierend auf 'Permastrukten':
(Mit all den Schwierigkeiten,diemit dereinfachen URL-Strukturierungmit benutzerdefinierten Beitragstypen verbunden sind,wollten wir WP aufgeben und zueinem anderen CMS wechseln. Dieses Pluginin Verbindungmit ACF und CPTUI oder Podsmacht Wordpressjedoch ziemlichprofessionell.)
To anyone interested in the solution, without having to tinker with raw PHP code, I highly recommend the plugin Permalink Manager Lite by Maciej Bis. It's a life saver.
It has a visual mechanism to remove or add whatever part you want in the custom post type's URL based on 'permastructs':
(With all the pain involved in simple URL structuring with custom post types, we were about to give up on WP and move to another CMS. But this plugin in conjunction with ACF and CPTUI or Pods makes Wordpress fairly professional.)
-
- 2020-05-29
Wenn Sie
get_post_type_archive_link()
verwenden,müssen Siemöglicherweise/%cat%/
mithilfe des Filterspost_type_archive_link
aus der URLentfernen.If you're using
get_post_type_archive_link()
, maybe you will need to remove/%cat%/
from the URL usingpost_type_archive_link
filter. -
- 2020-08-18
Ichfand die Antwort von @ chetan-vaghelafastperfekt;Inmeinem Anwendungsfall wollteich aucheine Liste aller Beiträge dieses Beitragstyps wieeine typische Archivseite anzeigen können (d. h./Kurse/,ohne Taxonomie danach).Ichmusstenureine zusätzliche Umschreiberegel wiefolgt hinzufügen:
function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); }
I found @chetan-vaghela 's answer almost perfect; in my use case I also wanted to be able to see a list of all posts by this post type like a typical archive page (i.e. /courses/, without any taxonomy after it). I just had to add one additional rewrite rule as follows:
function generated_rewrite_rules() { add_rewrite_rule( '^courses/(.*)/(.*)/?$', 'index.php?post_type=courses&name=$matches[2]', 'top' ); }
Ichbaueein LMS-Typsystemin WordPress auf,das von
benutzerdefinierten Beitragstypen
gesteuert wird.Der Beitragstyp heißt
Lektionen
(miteiner Reihe vonKursen
) und verfügt übereine benutzerdefinierteTaxonomie
(Kategorie)mit dem NamenKurse
.Die Domain-URL-Struktur wird derzeit wiefolgt angezeigt:
domain.com/courses/lesson-name
.Ichmöchte,dasses wird:
domain.com/courses/[course-name{category}‹/lesson-name
oderim Wesentlichen:
/[cpt]/% category%/%postname%/
Hierist das Plugin,dasichgeschrieben habe und dasjetzt die
CPTs
steuert.