Desativar SOMENTE o URL completo automaticamente, não todo o sistema de URL canônico


8

Eu tenho um blog com várias páginas em alguma categoria "projetos" que são estruturados / nomeados assim:

  • / projetos / projeto-2012
  • / projetos / projeto-2013
  • / projetos / projeto-2014
  • / projetos / projeto-2015

Quando um usuário digita URLs como http://myblog.com/project ou mesmo http://myblog.com/proje, ele é redirecionado para a página / projects / project-2012 . (Com um 301 movido permanentemente!)

Embora eu queira que o wordpress transforme os URLs resultantes em uma página claramente definida (por exemplo, http://myblog.com/?p=123 ) no formato canônico, desejo desativar apenas o preenchimento automático de URL para URLs "pouco claros" que pode apontar para várias páginas.

Minha pergunta é: como posso fazer isso?


Eu também fiz algumas pesquisas ...

  • A resposta aceita para a pergunta Desativar o preenchimento automático de URL do Wordpress desativa todo o sistema de URL canônico. Isso não é aceitável para mim.

  • Cerca de quatro anos atrás, algo assim apareceu no rastreador de erros do Wordpress: https://core.trac.wordpress.org/ticket/8948 Enquanto algumas boas soluções (como oferecer uma página "Não encontramos o seu URL. Mas você estava talvez procurando por uma das seguintes páginas? ") foram discutidas lá, o ticket foi encerrado no final.

  • EDIT: Na verdade, há um ticket mais recente em https://core.trac.wordpress.org/ticket/16557, que cobre exatamente o que eu preciso. Parece ser direcionado para a versão 4.0. E os comentários do ticket também contêm uma solução (veja abaixo).


esse recurso principal de adivinhação de URL também mexe com as ferramentas de SEO e SEO !!
Mau

Respostas:


11

Ok, depois de pesquisar um pouco mais, finalmente encontrei uma resposta para minha própria pergunta, oculta em um comentário deste ticket de solicitação de recurso: https://core.trac.wordpress.org/ticket/16557 O usuário nacin sugeriu o uso deste código:

function remove_redirect_guess_404_permalink( $redirect_url ) {
    if ( is_404() )
        return false;
    return $redirect_url;
}

add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );

Se você adicionar isso a um novo arquivo php de plug-in (por exemplo, em wp-content / plugins / disable-url-autocorrect-guessing.php), você terá um bom plug-in que pode ser ativado para desativar o recurso de "adivinhação" de correção automática do Wordpress .

Para poupar o problema, eu realmente fiz isso e entreguei meu plugin no Wordpress.org. Depois de revisado, você poderá baixá-lo aqui: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Embora essa seja uma solução funcional, o código sugerido é um pouco complicado. Uma vez que a solicitação de recurso em https://core.trac.wordpress.org/ticket/16557 seja efetivamente implementada, haverá soluções muito melhores para isso, além de um controle muito melhor sobre como a suposição deve ser realmente executada.


Gostaria de poder upvote este três vezes ...
KalenGi

Inspirou-me como eu estava tendo problemas no redirecionamento paginado. Eu estava planejando remove_filter(). Mas agora ignorando apenas um caso específico em que estou tendo problemas. Apenas em caso de alguém interessado sobre o meu problema: wordpress.stackexchange.com/questions/307670/...
Parixit

não funciona mais na v5 +
nodws

@nodws: A que você está se referindo? Estou usando meu plug-in com o trecho de código no 5.2.2 e ele ainda funciona bem.
Hauke ​​P.

Ah, foi um conflito com os redirecionamentos da
YOAST

0

Infelizmente, redirect_canonical()há mais de 400 linhas de código (e continua crescendo de release para release), que não é particularmente estruturado para ser controlado por um propósito. É tudo ou nada que não pode ser configurado de forma flexível.

Do ponto de vista prático, suas melhores opções são:

  1. Manipulando o redirecionamento manualmente, em template_redirect.
  2. Impedir o redirecionamento como redirect_canonicalgancho, se o destino criado não for desejável.

Em ambos os casos, você terá que desenvolver a lógica do que exatamente torna o redirecionamento indesejável.


Huh, isso é inesperadamente muito infeliz. :-( Minha definição de um redirecionamento indesejável é bastante simples: Cada URL que não pode ser resolvido para exatamente um alvo (mas múltipla ou nenhum) é indesejável e deve resultar em um 404.
Hauke P.

@HaukeP. lógica responsável por isso faz parte redirect_guess_404_permalink()e não faz essa distinção, apenas leva a primeira partida que o SQL produz :(
Rarst

Na verdade, eu encontrei uma solução por conta própria: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Eu não entendi um pouco sobre "exatamente um alvo", porque alguns casos de correspondência difusa vai tecnicamente resolver a apenas um jogo, mas não é o mesmo que se livrar de coisas difusa em geral :)
Rarst

Sim, na verdade, enquanto escrevia meu último comentário, parei por um segundo para pensar novamente com medo de ser incompreendido. :) Então, parece que eu deveria ter escrito meu comentário (e pergunta) mais preciso, afinal.
Hauke ​​P.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.