J'utilise la structure permalien /% post_id% /% postname% car j'ai du contenu soumis par l'utilisateur. Le problème est que% postname% s’incrémente toujours automatiquement et a l’air drôle, même si son identifiant est unique. Existe-t-il un moyen de désactiver% postname% auto-incrémenté?
domain.com/634/Apple-pie
domain.com/635/Apple-pie-2
domain.com/636/Apple-pie-3
devrait être:
domain.com/634/Apple-pie
domain.com/635/Apple-pie
domain.com/636/Apple-pie
Points bonus si vous pouvez le faire uniquement pour un type de message personnalisé spécifique.
Bonjour @ Thompson:
Malheureusement , le nom du message doit être unique pour un type de message donné , ainsi que le niveau de hiérarchie si le type de message est hiérarchique.
Il y a plusieurs façons de résoudre ce problème:
Utilisez /%post_id%-%postname%/
au lieu de /%post_id%/%postname%/
; cela le rend unique et ne rajoutera donc pas de -N
s ennuyeux à la fin de vos URL et vous donnera une légère amélioration en matière de référencement puisque les mots-clés importants seront à la racine du site Web et non à un niveau de répertoire inférieur. Ou
Si vous devez avoir la structure d'URL spécifiée, vous pouvez simplement définir votre lien permanent sur /%post_id%/
et utiliser les crochets 'post_link'
et 'init'
pour vous permettre d'ajouter respectivement le nom du message à l'URL et d'ajouter une permastruct qui correspond à un post_id
, une barre oblique, et n'importe quoi après la barre oblique mais jette les deux derniers parce qu'ils ne sont pas utilisés avec la structure permalink:
add_filter('post_link', 'mysite_post_link',10,2);
function mysite_post_link($permalink,$post) {
$post = get_post($post);
return "{$permalink}{$post->post_name}/";
}
add_action('init', 'mysite_init');
function mysite_init() {
global $wp_rewrite;
$wp_rewrite->add_permastruct("user_submitted_post",
'%post_id%/.*?',
'p=matches[1]');
$wp_rewrite->flush_rules(); // This line is only needed once
}
Essaye ça:
add_filter('wp_insert_post_data', 'remove_slug_suffix');
function remove_slug_suffix($data) {
if ('post' == $data['post_type'])
$data['post_name'] = preg_replace('/-\d+$/', '', $data['post_name']);
return $data;
}