web-dev-qa-db-fra.com

Existe-t-il des crochets qui modifient la logique 404?

Si vous avez une page 404 définie dans votre thème, Wordpress affichera une page 404 si "tag" est défini dans $ wp_query-> query_vars et si aucun article ne correspond à cette balise.

J'écris un plugin qui affiche des informations sur chaque page, en plus des messages. J'aimerais modifier la logique 404 afin que la page 404 soit affichée si aucun message ne correspond à une balise et le plug-in ne peut extraire aucune donnée correspondant à cette balise. Si le plugin peut trouver des données, j'aimerais afficher une page normale, qu'il y ait ou non des publications sur cette page ...

J'ai cherché sur Google, lu du code, lu le codex et fouillé ici, et je n'ai pas été en mesure de savoir où Wordpress déclenche ce 404 et comment je peux le remplacer. (J'ai le sentiment que cela pourrait avoir quelque chose à voir avec status_header () dans functions.php, mais on ne sait pas quand et comment je dois m'y accrocher).

Toute aide/idées/illumination appréciée.

Je vous remercie,

~ Patch

25
Patch

Après un peu plus de temps passé dans le code et Google, j'ai trouvé la réponse. Il est contenu dans ce fil de discussion (voir l'article d'Otto42), mais pour l'enregistrement, l'ajout suivant à votre plugin annulera le traitement de 404 pour les conditions que vous spécifiez:

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

Notez que vous devez définir "is_404" sur false avant que PHP ne génère les en-têtes. C'est pourquoi il est judicieux de l'intégrer dans la logique template_redirect.

~ Patch

27
Patch

J'avais besoin de faire la même chose pour un projet personnalisé où il y avait toujours 200 pages et où vous pouvez aussi simplement ajouter ceci en haut de votre fichier de modèle (ci-dessus get_header ();)

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

Créez le fichier de modèle 404.php dans votre thème et personnalisez-le selon vos besoins (en ajoutant la sortie de votre plugin ou autre). Vous mentionnez défini dans votre thème , quel est le problème avec cette approche pour vous?

Codex Création d'une page d'erreur 404

1
Rarst