Substituir% postname% sufixo%%%% postid%?

4

Eu gerencio um site de notícias e há um problema de permalink do Wordpress que venho me perguntando. Agora, o Wordpress adicionará um sufixo numérico incremental para duplicar% postname%, independentemente da estrutura do diretório.

Por exemplo, o wordpress adicionará um sufixo "-2" ao permalink, independentemente de a estrutura ser domain.com/2016/04/03/news-title ou domain.com/category/news-title-%post_id% quando detectar uma duplicata.

Inicialmente, acredito que o Wordpress não adicionaria o sufixo automaticamente depois de anexar um% post-id% ao final do permalink, mas esse não é o caso.

O que estou tentando alcançar (sem o Wordpress se intrometer no% postname%) é o seguinte:

  • domain.com/2016/04/03/news-title-44956 (assumindo que os números por trás são% 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

Eu odeio a ideia de que não poderei usar o mesmo título com um conteúdo diferente um ano depois (ou muitos anos depois), embora o diretório permalink seja muito diferente até então.

Existe alguma maneira de adicionar ganchos ou modificar temporariamente o núcleo do Wordpress para corrigir isso ou pelo menos fazer com que o Wordpress acrescente automaticamente o% post-id% em vez de um número incremental quando detecta um link permalink duplicado?

    
por Laurent Ho 04.04.2016 / 10:26

1 resposta

2

Suponho que você poderia filtrar wp_unique_post_slug e fazer com que ele retorne o espaçador original para as postagens, mas não tenho certeza de que tipo de efeitos colaterais isso pode ter:

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 );

E aqui está como você adicionaria o ID do post em vez 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 );
    
por kovshenin 04.04.2016 / 10:36