J'essaie de créer une structure personnalisée de permalien qui me permettra d'accomplir les tâches suivantes.
Je veux que ma structure permalien ressemble à ceci:
projets/catégorie/nom du projet
ou
/% custom-post-type% /% taxonomie personnalisée% /% post-name% /
J'ai pu utiliser avec succès /% category%/in permalinks pour des publications normales, prêtes à l'emploi WP, mais pas pour les CPT.
Comment la création d'une telle structure de lien permanent affecterait-elle les URL ou d'autres pages? Est-il possible de définir une structure personnalisée de permalien et de la limiter à un seul CPT?
Merci
Heureusement pour vous, je juste devais le faire pour un projet client. J'ai utilisé cette réponse sur le WordPress Stackexchange comme guide:
/**
* Tell WordPress how to interpret our project URL structure
*
* @param array $rules Existing rewrite rules
* @return array
*/
function so23698827_add_rewrite_rules( $rules ) {
$new = array();
$new['projects/([^/]+)/(.+)/?$'] = 'index.php?cpt_project=$matches[2]';
$new['projects/(.+)/?$'] = 'index.php?cpt_project_category=$matches[1]';
return array_merge( $new, $rules ); // Ensure our rules come first
}
add_filter( 'rewrite_rules_array', 'so23698827_add_rewrite_rules' );
/**
* Handle the '%project_category%' URL placeholder
*
* @param str $link The link to the post
* @param WP_Post object $post The post object
* @return str
*/
function so23698827_filter_post_type_link( $link, $post ) {
if ( $post->post_type == 'cpt_project' ) {
if ( $cats = get_the_terms( $post->ID, 'cpt_project_category' ) ) {
$link = str_replace( '%project_category%', current( $cats )->slug, $link );
}
}
return $link;
}
add_filter( 'post_type_link', 'so23698827_filter_post_type_link', 10, 2 );
Lorsque vous enregistrez le type de publication personnalisé et la taxonomie, veillez à utiliser les paramètres suivants:
// Used for registering cpt_project custom post type
$post_type_args = array(
'rewrite' => array(
'slug' => 'projects/%project_category%',
'with_front' => true
)
);
// Some of the args being passed to register_taxonomy() for 'cpt_project_category'
$taxonomy_args = array(
'rewrite' => array(
'slug' => 'projects',
'with_front' => true
)
);
Bien sûr, veillez à effacer les règles de réécriture lorsque vous avez terminé. Bonne chance!
Pendant que vous enregistrez votre type de message personnalisé, slug a été utilisé
$post_type_args = array(
'rewrite' => array(
'slug' => 'projects',
'with_front' => true
)
Vous pouvez essayer avec Setting-> permalink
faire parent de ce poste aussi faire votre lien