J'ai
custom post type -> resources
custom taxonomy -> resources_type
Je veux des permaliens personnalisés où la catégorie de base sera ajoutée à la fin au lieu de devant
Par exemple: j'ajoute une nouvelle ressource avec titre "Première ressource" et assigne terme comme type1
Ce que je reçois - http://example.com/resources/resources-type/type1/first-resource
Ce que je veux _ - http://example.com/resources/first-resource/resources-type/type1
J'utilise le code d'argument suivant dans le type de post du registre:
'rewrite' => array("slug" => "/resources/resources-type/%resources_type%"),
Et puis en utilisant le code suivant pour remplacer le "% resources_type%" dans le code ci-dessus
function wpa_course_post_link( $post_link, $id = 0 ){
$post = get_post($id);
if ( is_object( $post ) ){
$terms = wp_get_object_terms( $post->ID, 'resources_type' );
if( $terms ){
return str_replace( '%resources_type%' , $terms[0]->slug , $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
Vous pouvez obtenir la structure permalien suivante en remplaçant simplement (sans avoir à supprimer) celle par défaut (que vous avez spécifiée) pour le type de publication resources
:
/resources/%resources%/resources-type/%resources_type% <- preferred
/resources/resources-type/%resources_type%/%resources% <- default
Et vous pouvez le remplacer via add_permastruct()
- d’abord, enregistrez le type de publication sans spécifier le paramètre rewrite
qui signifie que la réécriture par défaut est true
/enabled et que le slug serait resources
(c’est-à-dire le clé de type de publication ou slug):
register_post_type( 'resources', array(
'label' => 'Resources',
'public' => true,
// no need to set the 'rewrite' arg
...
) );
Ensuite, juste après cela, remplacez la structure permalink comme ceci:
add_permastruct( 'resources', '/resources/%resources%/resources-type/%resources_type%' );
où le format est - la partie importante est le {POST TYPE KEY}
, qui dans votre cas est resources
:
add_permastruct( '{POST TYPE KEY}', '{PERMALINK STRUCTURE}' );
(N'oubliez pas de vider les règles de réécriture - visitez la page des paramètres de permalien.)}
/resources/%resources%
/resources/%resources%
(c'est-à-dire /{POST TYPE KEY}/%{POST TYPE KEY}%
) est automatiquement ajouté si %{POST TYPE KEY}%
est trouvé dans la structure de lien permanent. Vous pouvez l'enlever comme ceci:
add_filter( 'resources_rewrite_rules', 'filter_resources_rewrite_rules' );
function filter_resources_rewrite_rules( $rules ) {
$pattern = 'resources/([^/]+)/resources-type/';
$p_length = strlen( $pattern );
foreach ( $rules as $regex => $query ) {
if ( $pattern !== substr( $regex, 0, $p_length ) ) {
unset( $rules[ $regex ] );
}
}
return $rules;
}
_ {Si le type de publication est hiérarchique, le $pattern
serait alors resources/(.+?)/resources-type/
.}
Et si vous souhaitez utiliser le code/la fonction ci-dessus avec un autre type de message, il vous suffit en principe de remplacer le texte "ressources" par le type de message approprié clé.
Voir https://developer.wordpress.org/reference/hooks/permastructname_rewrite_rules/ pour plus de détails sur ce filtre.