Ci sono dei ganci che alterano la logica 404?


27

A condizione che tu abbia una pagina 404 definita nel tuo tema, Wordpress visualizzerà una pagina 404 se "tag" è definito in $ wp_query-> query_vars e non ci sono messaggi corrispondenti a quel tag.

Sto scrivendo un plug-in che visualizza alcune informazioni su ogni pagina, oltre ai post. Vorrei modificare la logica 404 in modo che venga visualizzata la pagina 404 se non ci sono post corrispondenti a un tag e il plug-in non è in grado di recuperare i dati corrispondenti a quel tag. Se il plug-in è in grado di trovare dati, mi piacerebbe mostrare una pagina normale, indipendentemente dal fatto che ci siano post su quella pagina o meno ...

Ho cercato su Google, letto il codice, letto il codice e frugando qui, e non sono stato in grado di capire dove Wordpress attiva quel 404 e come posso ignorarlo. (Ho la sensazione che potrebbe avere qualcosa a che fare con status_header () in Functions.php, ma non è chiaro come e quando devo collegarmi).

Qualsiasi aiuto / idee / illuminazione apprezzato.

Grazie,

~ Patch

Risposte:


29

Dopo aver cercato un po 'più di codice e googling, ho trovato la risposta. È contenuto in questa discussione (vedi il post di Otto42), ma per la cronaca, l'aggiunta di quanto segue al tuo plugin sovrascriverà la gestione 404 per le condizioni specificate:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

Nota che devi impostare "is_404" su false prima che PHP emetta le intestazioni, motivo per cui è una buona idea agganciarlo nella logica template_redirect.

~ Patch


5

Avevo bisogno di fare lo stesso per un progetto personalizzato in cui c'erano sempre 200 pagine e ho scoperto che puoi anche semplicemente aggiungere questo nella parte superiore del tuo file modello (sopra get_header ();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

1
Grande! Questo ha funzionato per me. Stavo realizzando il mio script e ha generato 404. Ho provato gli script runnig da wp-> main ma quella non era una soluzione pulita. Questo ha funzionato per me:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux,

1

Crea un 404.phpfile modello nel tuo tema e personalizzalo secondo necessità (aggiungendo l'output del tuo plugin o altro). Citi definito nel tuo tema , cosa c'è di sbagliato in questo approccio per te?

Codice Creazione di un errore 404 Pagina


Quello che sto cercando è un modo per modificare le circostanze in cui viene attivata quella pagina 404. In questo momento, se Wordpress non riesce a trovare alcun post corrispondente a un tag nelle query di query, viene visualizzata la pagina 404. Vorrei inserire qualche codice aggiuntivo che assicuri che la pagina 404 appaia solo se Wordpress non riesce a trovare alcun post e il mio plugin non riesce a trovare alcuna informazione aggiuntiva da visualizzare.
Patch del

Lo scopo di 404 è che i visitatori sappiano che il collegamento è errato e che l'utente può registrarlo e correggerlo (se necessario). Non vuoi dire al visitatore che sta usando un collegamento interrotto o essere consapevole di ciò da solo. La visualizzazione delle informazioni su 404 funziona bene, dirottarla non è un requisito, quindi perché preoccuparsi? Sto solo cercando di capire la tua logica e / o tecnicismi.
Rarst

1
Quello che stavo cercando era un modo per cambiare la definizione di "pagine sbagliate". Il sito che sto costruendo ha un componente blog, ma non è tutto il sito. Sto usando i tag Wordpress sia per visualizzare i post di Wordpress sia per estrarre contenuti aggiuntivi tramite il plug-in. Voglio restituire un codice di stato 200 se a) ci sono post oppure b) il mio plugin può trovare materiale da visualizzare che corrisponde al tag. Quindi la necessità di ricollegare la logica. Indipendentemente da ciò, grazie per aver dedicato del tempo a scrivere una risposta - mi dispiace che il mio problema sia abbastanza strano da aver bisogno di una risposta più coinvolta :-)
Patch
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.