Je construis un système de type LMS dans WordPress, contrôlé par Custom Post types
.
Le type de publication est appelé Lessons
(avec un slug de courses
) et il en a une custom taxonomy
(catégorie) appelée courses
.
La structure de l'url du domaine s'affiche actuellement comme suit:
domain.com/courses/lesson-name
.
Je veux qu'il devienne:
domain.com/courses/[course-name{category}]/lesson-name
ou essentiellement:
/[cpt]/%category%/%postname%/
voici le plugin que j'ai écrit qui contrôle le CPTs
maintenant.
function rflms_post_type() {
$labels = array(
'name' => _x( 'Lessons', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Lesson', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Lessons', 'text_domain' ),
'parent_item_colon' => __( 'Parent Product:', 'text_domain' ),
'all_items' => __( 'All Lessons', 'text_domain' ),
'view_item' => __( 'View Lesson', 'text_domain' ),
'add_new_item' => __( 'Add New Lesson', 'text_domain' ),
'add_new' => __( 'New Lesson', 'text_domain' ),
'edit_item' => __( 'Edit Lesson', 'text_domain' ),
'update_item' => __( 'Update Lesson', 'text_domain' ),
'search_items' => __( 'Search Lessions', 'text_domain' ),
'not_found' => __( 'No Lessons Found', 'text_domain' ),
'not_found_in_trash' => __( 'No Lessons Found in Trash', 'text_domain' ),
);
$args = array(
'label' => __( 'Lessons', 'text_domain' ),
'description' => __( 'Referable Lessons', 'text_domain' ),
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'supports' => array('premise-member-access', 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
'menu_position' => 5,
'menu_icon' => null,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
'rewrite' => array('slug' => 'courses'),
);
register_post_type( 'lessons', $args );
// Hook into the 'init' action
}
add_action( 'init', 'rflms_post_type', 0 );
// Register Custom Taxonomy
function custom_taxonomy() {
$labels = array(
'name' => _x( 'Courses', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Course', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Courses', 'text_domain' ),
'all_items' => __( 'All Courses', 'text_domain' ),
'parent_item' => __( 'Parent Course', 'text_domain' ),
'parent_item_colon' => __( 'Parent Course:', 'text_domain' ),
'new_item_name' => __( 'New Course Name', 'text_domain' ),
'add_new_item' => __( 'Add New Course', 'text_domain' ),
'edit_item' => __( 'Edit Course', 'text_domain' ),
'update_item' => __( 'Update Course', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate Courses with commas', 'text_domain' ),
'search_items' => __( 'Search Courses', 'text_domain' ),
'add_or_remove_items' => __( 'Add or Remove Courses', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from Most Used courses', 'text_domain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => false,
'rewrite' => array('slug' => 'courses'),
);
register_taxonomy( 'course', 'lessons', $args );
}
// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );
custom-post-types
custom-taxonomy
Zach Russell
la source
la source
post_type_link
filtre. plus sur: wordpress.stackexchange.com/a/167992/33667 )Réponses:
Modifiez votre réécriture pour ajouter la var de requête de cours:
Filtrez ensuite
post_type_link
pour insérer le cours sélectionné dans le permalien:Il existe également des plugins tels que les permaliens de type de publication personnalisés qui peuvent le faire pour vous.
la source
Oui! Après beaucoup de recherches, j'ai obtenu le plugin ' Custom Permalinks ' . Qui répond à mes exigences concernant - URL personnalisée par exemple
Comme ce type de message personnalisé - Message :
la source
Vous avez la solution!
Pour disposer de permaliens hiérarchiques pour le type de publication personnalisé, installez le plug-in de permaliens de type de publication personnalisé ( https://wordpress.org/plugins/custom-post-type-permalinks/ ).
Mettre à jour le type de message enregistré. J'ai le nom du type de message comme centre d'aide
Et voici la taxonomie enregistrée
Cette ligne fait fonctionner votre permalien
vous pouvez supprimer
%post_id%
et conserver/%help_centre_category%/%postname%/"
N'oubliez pas de vider les permaliens du tableau de bord.
la source
La solution pour moi comportait trois parties. Dans mon cas, le type de message est appelé
trainings
.'rewrite' => array('slug' => 'trainings/%cat%')
à laregister_post_type
fonction.Voici donc comment modifier dynamiquement le permalien pour un type de publication donné. Ajouter à
functions.php
:... et voici comment charger le modèle approprié sur la nouvelle URL dynamique. Ajouter à
functions.php
:C'est ça! N'oubliez pas de rafraîchir les permaliens en les enregistrant à nouveau dans de backend. Ou utilisez la
flush_rewrite_rules()
fonction.la source
Vous devez mettre à jour la ligne ci-dessous à l'endroit où vous avez enregistré un type de publication personnalisé à l'aide de la fonction register_post_type.
'rewrite' => array ('slug' => 'courses /% cat%')
Pour changer le permalien dynamiquement du type de publication, vous devez ajouter le code ci-dessous dans le fichier functions.php:
Après cela, vous devez vider les permaliens de réécriture, aller sur wp-admin> Paramètres> permaliens . il suffit de mettre à jour le paramètre de permalien à l'aide du bouton "Enregistrer les modifications".
il renverra les URL comme ci-dessous:
Merci!
la source
Cela fonctionne pour moi:
la source
Pour toute personne intéressée par la solution, sans avoir à bricoler du code PHP brut, je recommande fortement le plugin Permalink Manager Lite de Maciej Bis. C'est un épargnant de vie.
Il dispose d'un mécanisme visuel pour supprimer ou ajouter la partie que vous souhaitez dans l'URL du type de publication personnalisé en fonction des `` infrastructures '':
(Avec toutes les difficultés liées à la simple structuration d'URL avec des types de publication personnalisés, nous étions sur le point d'abandonner WP et de passer à un autre CMS. Mais ce plugin en conjonction avec ACF et CPTUI ou Pods rend Wordpress assez professionnel.)
la source