web-dev-qa-db-fra.com

Remplacer le suffixe% postname% par Wordpress par% postid%?

Je dirige un site de nouvelles et il y a un problème de permalien Wordpress que je me demandais. Désormais, Wordpress ajoutera un suffixe numérique incrémentiel pour dupliquer% postname%, quelle que soit la structure du répertoire.

Par exemple, wordpress ajoutera un suffixe "-2" au permalien, que la structure soit au format domain.com/2016/04/03/news-title ou domain.com/category/news-title-%post_id% lorsqu’il détectera un doublon.

Je pensais au départ que Wordpress n’ajouterait pas automatiquement le suffixe après l’ajout de% post-id% à la fin du permalien, mais ce n’est pas le cas.

Ce que j'essaie de réaliser (sans que Wordpress intervienne avec% postname%) est le suivant:

  • domain.com/2016/04/03/news-title-44956 (en supposant que le nombre derrière est le% post_id)
  • domain.com/2017/05/06/news-title-55957

ou

  • domain.com/2016/04/03/44956/news-title
  • domain.com/2017/05/06/55957/news-title

Je déteste l'idée de ne pas pouvoir utiliser le même titre avec un contenu différent un an plus tard (ou plusieurs années plus tard), même si le répertoire de liens permanents est très différent à ce moment-là.

Puis-je ajouter des points d'ancrage ou modifier temporairement le noyau Wordpress pour résoudre ce problème ou au moins faire en sorte que Wordpress ajoute automatiquement le% post-id% au lieu d'un nombre incrémentiel lorsqu'il détecte un lien permanent en double?

3
Laurent Ho

Je suppose que vous pouvez filtrer wp_unique_post_slug et le renvoyer pour les posts, mais je ne suis pas sûr du type d'effets secondaires que cela peut avoir:

add_filter( 'wp_unique_post_slug', function( $slug, $post_id, $post_status, $post_type, $post_parent, $original_slug ) {
    if ( $post_type == 'post' )
        $slug = $original_slug;

    return $slug;
}, 10, 6 );

Et voici comment vous ajouteriez l'ID de l'article au lieu de -2:

add_filter( 'wp_unique_post_slug', function( $slug, $post_id, $post_status, $post_type, $post_parent, $original_slug ) {
    if ( $post_type == 'post' && $slug != $original_slug )
        $slug = preg_replace( '#\-[0-9]+$#', '-' . $post_id, $slug );

    return $slug;
}, 10, 6 );
1
kovshenin