web-dev-qa-db-fra.com

Désactiver% postname% auto-incrémenté?

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.

2
Thompson

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:

  1. Utilisez /%post_id%-%postname%/ au lieu de /%post_id%/%postname%/; cela le rend unique et ne rajoutera donc pas de -Ns 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

  2. 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
}
3
MikeSchinkel

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;
}
1
Rarst