Disabilita SOLO completamento automatico URL, non l'intero sistema URL canonico


8

Ho un blog con diverse pagine in alcuni "progetti" di categoria strutturati / denominati in questo modo:

  • / Progetti / progetto-2012
  • / Progetti / progetto del 2013
  • / Progetti / progetto-2014
  • / Progetti / progetto-2015

Quando un utente inserisce URL come http://myblog.com/project o persino http://myblog.com/proje , viene reindirizzato alla pagina / progetti / progetto-2012 . (Con un 301 spostato definitivamente!)

Mentre desidero che wordpress trasformi gli URL risultanti in una pagina chiaramente definita (ad esempio come http://myblog.com/?p=123 ) in forma canonica, desidero disabilitare solo il completamento automatico dell'URL per URL "poco chiari" che potrebbe puntare a più pagine.

La mia domanda è: come posso ottenere questo risultato?


Ho anche fatto delle ricerche ...

  • La risposta accettata alla domanda Disabilita completamento automatico dell'URL di Wordpress disabilita l'intero sistema di URL canonico. Questo non è accettabile per me.

  • Circa quattro anni fa qualcosa di simile è apparso sul tracker dei bug di Wordpress: https://core.trac.wordpress.org/ticket/8948 Mentre alcune buone soluzioni (come offrire una pagina "Non abbiamo trovato il tuo URL. Ma eri tu forse stai cercando una delle pagine seguenti? ") sono stati discussi lì, il biglietto è stato chiuso alla fine.

  • EDIT: In realtà c'è un biglietto più recente su https://core.trac.wordpress.org/ticket/16557 che copre esattamente ciò di cui ho bisogno. Sembra essere destinato alla versione 4.0. E i commenti sui biglietti contengono anche una soluzione (vedi sotto).


questa funzione di indovinare l'URL di base fa anche casino con gli strumenti SEO e SEO !!
Mau,

Risposte:


11

Ok, dopo aver cercato un po 'di più ho finalmente trovato una risposta alla mia domanda nascosta in un commento di questo ticket di richiesta di funzionalità: https://core.trac.wordpress.org/ticket/16557 L'utente nacin ha suggerito di usare questo codice:

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 lo aggiungi a un nuovo file php del plug-in (ad esempio in wp-content / plugins / disable-url-autocorrect-guessing.php) avrai un bel plug-in che puoi attivare per disabilitare la funzione "indovinando" la correzione automatica di Wordpress .

Per salvarti il ​​problema, l'ho fatto e consegnato il mio plugin su Wordpress.org. Una volta che viene esaminato lì, dovresti essere in grado di scaricarlo qui: https://wordpress.org/plugins/disable-url-autocorrect-guessing/


Mentre questa è una soluzione funzionante, il codice suggerito è in qualche modo un hack. Una volta che la richiesta di funzionalità in https://core.trac.wordpress.org/ticket/16557 è effettivamente implementata, ci saranno soluzioni migliori per questo così come un controllo molto migliore su come le ipotesi debbano essere effettivamente eseguite.


Vorrei poter votare questo tre volte ...
KalenGi

Mi ha ispirato mentre stavo riscontrando problemi nel reindirizzamento impaginato. Avevo intenzione di farlo remove_filter(). Ma ora bypassando solo casi specifici in cui ho problemi. Nel caso qualcuno fosse interessato al mio problema: wordpress.stackexchange.com/questions/307670/…
Parixit

non funziona più in v5 +
nodws

@nodws: a cosa ti riferisci? Sto usando il mio plugin con lo snippet di codice in 5.2.2 e funziona ancora bene.
Hauke ​​P.

Oh, è stato un conflitto con i reindirizzamenti di
YOAST

0

Purtroppo ci redirect_canonical()sono oltre 400 righe di codice (e continua a crescere da una versione all'altra), che non è particolarmente strutturato per essere controllato dallo scopo. È tutto o niente affare che non può essere configurato in modo flessibile.

Dal punto di vista pratico le tue migliori opzioni sono:

  1. Gestire il reindirizzamento manualmente, a template_redirect.
  2. Prevenire il reindirizzamento come redirect_canonicalhook se l'obiettivo non è stato desiderato.

In entrambi i casi dovrai sviluppare la logica di ciò che rende esattamente il reindirizzamento indesiderato.


Huh, è inaspettatamente molto sfortunato. :-( La mia definizione di reindirizzamento indesiderato è piuttosto semplice: ogni URL che non può essere risolto esattamente su un target (ma multiplo o nessuno) è indesiderabile e dovrebbe risultare in un 404.
Hauke ​​P.

@HaukeP. la logica responsabile di ciò fa parte redirect_guess_404_permalink()e non fa una tale distinzione, prende solo la prima partita prodotta da SQL :(
Rarst

In realtà ho trovato una soluzione da solo: wordpress.stackexchange.com/a/144970/51898
Hauke ​​P.

@HaukeP. Ti ho frainteso un po 'su "esattamente un bersaglio", perché alcuni casi di corrispondenza fuzzy si risolveranno tecnicamente in una sola partita, ma non è lo stesso di sbarazzarsi di cose fuzzy in generale :)
Rarst

Sì, in realtà, mentre scrivevo il mio ultimo commento, mi sono fermato per un secondo a ripensarci, nella paura di essere frainteso. :) Quindi sembra che avrei dovuto scrivere il mio commento (e la mia domanda) più preciso dopo tutto.
Hauke ​​P.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.