Deshabilite SOLO URL autocompletar, no todo el sistema de URL canónico

8

Tengo un blog con varias páginas en alguna categoría de "proyectos" que están estructurados / nombrados así:

  • / proyectos / proyecto-2012
  • / proyectos / proyecto-2013
  • / proyectos / proyecto-2014
  • / proyectos / proyecto-2015

Cuando un usuario ingresa URL como http://myblog.com/project o incluso http://myblog.com/proje , se lo redirige a la página / projects / project-2012 . (¡Con un 301 movido permanentemente!)

Si bien quiero que WordPress convierta las URL que dan como resultado una página claramente definida (por ejemplo, http://myblog.com/?p=123 ) en forma canónica, quiero deshabilitar solo la finalización automática de URL para URL "poco claras" que podría apuntar a varias páginas.

Mi pregunta es: ¿cómo puedo lograr esto?


También investigué un poco ...

  • La respuesta aceptada a la pregunta Desactivar autocompletar URL de Wordpress deshabilita todo el sistema de URL canónico. Esto no es aceptable para mi.

  • Hace unos cuatro años, algo así apareció en el rastreador de errores de Wordpress: https://core.trac.wordpress.org/ticket/8948 Mientras que algunas buenas soluciones (como ofrecer una página "No encontramos su URL. tal vez buscando una de las siguientes páginas? ") se discutieron allí, el boleto se cerró al final.

  • EDITAR: en realidad hay un boleto más nuevo en https://core.trac.wordpress.org/ticket/16557 que cubre exactamente lo que necesito. Parece estar dirigido a la versión 4.0. Y los comentarios del ticket también contienen una solución (ver más abajo).

Hauke ​​P.
fuente
¡Esta característica central de adivinación de URL también se mete con las herramientas de SEO y SEO!
Mau

Respuestas:

11

De acuerdo, después de buscar un poco más, finalmente encontré una respuesta a mi propia pregunta oculta en un comentario de este ticket de solicitud de función: https://core.trac.wordpress.org/ticket/16557 El usuario sugirió utilizar este 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' );

Si agrega esto a un nuevo archivo php de complemento (por ejemplo, en wp-content / plugins / disable-url-autocorrect-guesssing.php) tendrá un buen complemento que puede activar para desactivar la función de "adivinación" de autocorrección de Wordpress .

Para ahorrarte el problema, hice esto y entregué mi plugin en Wordpress.org. Una vez que se revise allí, debería poder descargarlo aquí: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Si bien esta es una solución que funciona, el código sugerido es un truco. Una vez que se implemente la solicitud de características en https://core.trac.wordpress.org/ticket/16557 , habrá mejores soluciones para esto, así como un control mucho mejor sobre cómo se deben realizar las conjeturas.

Hauke ​​P.
fuente
Ojalá pudiera votar esto tres veces ...
KalenGi
Me inspiró ya que estaba teniendo problemas en la redirección paginada. Estaba planeando hacerlo remove_filter(). Pero ahora pasando por alto solo un caso específico en el que estoy teniendo problemas. Por si alguien interesado en mi problema: wordpress.stackexchange.com/questions/307670/…
Parixit
ya no funciona en v5 +
asiente con la cabeza
@nodws: ¿A qué te refieres? Estoy usando mi complemento con el fragmento de código en 5.2.2 y todavía funciona bien.
Hauke ​​P.
Oh, fue un conflicto con las redirecciones de
YOAST
0

Desafortunadamente, redirect_canonical()hay más de 400 líneas de código (y sigue creciendo de versión en versión), que no está particularmente estructurado para ser controlado por propósito. Es un acuerdo de todo o nada que no se puede configurar de manera flexible.

Desde el punto de vista práctico, sus mejores opciones son:

  1. Manejo de redireccionamiento manual, a las template_redirect.
  2. Evitar la redirección como redirect_canonicalgancho si el objetivo que se le ocurrió no es deseable.

En cualquier caso, tendrá que desarrollar la lógica de lo que hace exactamente la redirección no deseada.

Rarst
fuente
Huh, eso es inesperadamente muy desafortunado. :-( Mi definición de una redirección no deseada es bastante simple: cada URL que no puede resolverse exactamente a un objetivo (pero múltiple o ninguna) es indeseable y debería dar como resultado un 404.
Hauke ​​P.
@HaukeP. la lógica responsable de eso es parte redirect_guess_404_permalink()y no hace tal distinción, solo toma la primera coincidencia que SQL produce :(
Rarst
En realidad, encontré una solución por mi cuenta: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.
@HaukeP. No lo entendí un poco sobre "exactamente un objetivo", porque algunos casos de coincidencia difusa técnicamente se resolverán en una sola coincidencia, pero no es lo mismo que deshacerse de cosas difusas en general :)
Rarst
Sí, en realidad, mientras escribía mi último comentario, me detuve por un segundo para pensar de nuevo por miedo a que me malinterpretaran. :) Entonces parece que debería haber escrito mi comentario (y pregunta) más preciso después de todo.
Hauke ​​P.