Ajouter la base de la catégorie à l'URL dans le type de message / taxonomie personnalisé
-
-
Récemment,je suis confronté à ceproblème.** Résolu! ** [# 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
-
** SOLUTION! ** (Après des recherches sansfin)
vous devezmodifier lefiltre `post_type_link`.plus sur: 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
-
duplicationpossible de [Commentmodifier la structure du lienpermanentpour letype depublicationpersonnaliséet sestaxonomies?] (http://wordpress.stackexchange.com/questions/28979/how-to-change-permalink-structure-for-custom-post-type-et-ses-taxonomies)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 réponses
- votes
-
- 2013-04-06
Modifiez votre réécriturepour ajouter la variable de requête de cours:
'rewrite' => array('slug' => 'courses/%course%')
Puisfiltrez
post_type_link
pourinsérer le cours sélectionné dans lepermalien: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 );
Ilexiste également despluginstels que Permaliens detype demessagepersonnalisé quipeuvent lefairepour vous.
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.
-
Merci,j'apprécie votre réponse rapide.C'esttout àfait logique.Je suis curieux cependant,où dois-jeinsérer lefiltrepost_type_link?puis-je simplement aller aubas du documententier?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
-
Je l'ai ajoutéen baset c'est lapage 404.I added it to the bottom and it 404's the page.
- 0
- 2013-04-06
- Zach Russell
-
vous devez vider les réécritures,visitez lapage desparamètres despermaliens.you have to flush rewrites, visit the permalinks settings page.
- 1
- 2013-04-06
- Milo
-
notez également que vous aurezprobablement un conflit avec unetaxonomieet untype depublicationpartageant lemême slug.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
-
Là oùj'en suismaintenant,c'est que lespermaliens sont corrects,mais celane s'exécutepas correctement (c'est le soft 404ing).Des recommandations sur ce queje peuxfairepour que celafonctionne correctement?Je suis loin des réécritures deflushpermalien.Cliquez simplement sur ``enregistrer ''et ilmet àjour lefichier (c'estnginx doncilest contrôlé dans lefichiernginx.conf)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
-
Je l'ai!C'était un conflit.Got it! It was a conflict.
- 0
- 2013-04-06
- Zach Russell
-
Downvote -page d'archive 404Downvote - archive page 404
- 1
- 2020-04-04
- Dev
-
Celane fonctionnepaspour les articlestraduits sur un sitemultilingue (parexempleen utilisant WPML).This doesn't work for translated posts on a multilingual site (for example using WPML).
- 0
- 2020-08-05
- montrealist
-
Celamontre lapage d'accueilpourmoi sur l'URLnouvellement créée.Vous devez utiliser lafonction add_rewrite_rule () vue dans la réponse de @ Florispour que celafonctionne.Notez également que lespages d'archivene fonctionnentplus,j'obtiens 404pour/my-post-typeet pour/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
La solutionpourmoi comportaittroisparties. Dansmon cas,letype depublication s'appelle
trainings
.- Ajouter
'rewrite' => array('slug' => 'trainings/%cat%')
à lafonctionregister_post_type
. - Modifiez le slugpour avoir une catégorie dynamique.
- "Écoutez" lanouvelle URL dynamiqueet chargez lemodèle approprié.
Voici donc comment changer dynamiquement lepermalienpour untype depublication donné. Ajouter à
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 );
...et voici comment charger lemodèle approprié sur lanouvelle URL dynamique. Ajouter à
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' );
C'esttout! N'oubliezpas d'actualiser lespermaliensen enregistrant ànouveau lespermaliens dans lebackend. Ou utilisez lafonction
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
Vous avez la solution!
Pour avoir des lienspermanents hiérarchiquespour letype depublicationpersonnalisé,installez les lienspermanents detype depublicationpersonnalisé ( https://wordpress.org/plugins/custom-post-type-permalinks/)plugin.
Mettre àjour letype demessageenregistré. J'ai lenom dutype demessage comme centre d'aide
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');
Et voici lataxonomieenregistrée
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');
Cette lignefaitfonctionner votrepermalien
"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
vouspouvez supprimer
%post_id%
et conserver/%help_centre_category%/%postname%/"
N'oubliezpas de vider lespermaliens dutableau debord.
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
Ouais! Après denombreuses recherches,j'ai obtenu leplugin ' Permalienspersonnalisés '.Ce qui répond àmesexigencesen ce qui concerne - URLpersonnalisée,parexemple
- pour la catégorie
- pour lapublication
- pour lapublicationpersonnalisée
- pour lataxonomiepersonnalisée etc.
Comme ce Type demessagepersonnalisé - Message :
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
Vous devezmettre àjour la ligne ci-dessous où vous avezenregistré untype depublicationpersonnalisé à l'aide de lafonction register_post_type.
'rewrite'=> array ('slug'=> 'cours/% cat%')
Pour changer dynamiquement le lienpermanent dutype depublication,vous devez ajouter le code ci-dessous dans lefichierfunctions.php:
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' );
Après cela,vous devez vider les réécriturespermaliens,allez dans les wp-admin> Paramètres>permaliens .il suffit demettre àjour leparamètre depermalienen utilisant lebouton "Enregistrer lesmodifications".
il renverra des URL comme ci-dessous:
- domain.com/courses/[nom-cours{category}letter/lesson-name
Merci!
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!
-
Vote défavorable - 404 sur lestypes depage d'archive CPTet CTP uniquesDown vote - 404 on both single CPT and CTP archive page types
- 0
- 2020-04-04
- Dev
-
@dev avez-vous suivitoutes les étapes quej'aimentionnées dansma réponse?avez-vous vidé vospermaliens de réécriture?J'aitestéet celafonctionnetrèsbien.@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
Cela afonctionnépourmoi:
'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 ),
-
Celan'utilisepas les catégories ou leur chemin,cela rend uniquement letype depublicationpersonnalisé hiérarchique.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
Atoutepersonneintéresséepar la solution,sans avoir àbricoler avec du code PHPbrut,je recommande vivement leplugin Permalink Manager Lite par Maciej Bis.C'est unebouée de sauvetage.
Il dispose d'unmécanisme visuelpour supprimer ou ajouter lapartie que vous voulez dans l'URL dutype depublicationpersonnaliséen fonction des 'infrastructures':
(Avectoute la douleur liée à la simple structuration d'URL avec destypes depublicationpersonnalisés,nous étions sur lepoint d'abandonner WPet depasser à un autre CMS. Mais cepluginen conjonction avec ACFet CPTUI ou Pods rend Wordpress assezprofessionnel.)
/p>
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
Si vous utilisez
get_post_type_archive_link()
,vous devrezpeut-être supprimer/%cat%/
de l'URLen utilisant lefiltrepost_type_archive_link
.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
J'aitrouvé la réponse de @ chetan-vaghelapresqueparfaite;dansmon cas d'utilisation,je voulais égalementpouvoir voir une liste detous lesmessagespar cetype demessage comme unepage d'archivetypique (c'est-à-dire/courses/,sans aucunetaxonomie après).Je devaisjuste ajouter une règle de réécriture supplémentaire comme suit:
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' ); }
Je suisen train de créer un système detype LMS dans WordPress,contrôlépar
Custom Post types
.Letype demessage s'appelle
Lessons
(avec un slug decourses
)et il a unecustom taxonomy
(catégorie) appeléecourses
.La structure de l'URL du domaine s'affiche actuellement sous laforme:
domain.com/courses/lesson-name
.Je veux qu'il devienne:
domain.com/courses/[course-name{category}]/lesson-name
ouessentiellement:
/[cpt]/%category%/%postname%/
voici leplugin quej'ai écritet qui contrôlemaintenant les
CPTs
.