Je dois forcer un 404 sur certains postes en fonction des conditions. J'ai réussi à le faire (bien que je ne sache pas si je l'ai fait correctement) et je suis en train de 404.php
télécharger mon modèle comme prévu.
Mon code:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
include( get_query_template( '404' ) );
exit; # so that the normal page isn't loaded after the 404 page
}
}
add_action( 'template_redirect', 'rr_404_my_event', 1 );
Code 2 de cette question connexe - même problème:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
global $wp_query;
$wp_query->set_404();
}
}
add_action( 'wp', 'rr_404_my_event' );
Mon problème:
Bien que cela ait l' air bien, j'obtiens un statut 200 OK
si je vérifie l'onglet Réseau. Comme il s'agit d'un statut 200
, je crains que les moteurs de recherche ne puissent également indexer ces pages.
Comportement attendu:
Je veux qu'un statut 404 Not Found
soit envoyé.
200
avec ça.Réponses:
Vous pouvez essayer la fonction Wordpress
status_header()
pour ajouter l'en-HTTP/1.1 404 Not Found
tête.Ainsi, votre exemple de code 2 serait:
Cette fonction est par exemple utilisée dans cette partie:
de la
wp
classe à/wp-includes/class-wp.php
.Essayez donc d'utiliser cet exemple de code 2 modifié en plus de votre
template_include
code.la source
Code 2
extrait que vous avez posté fonctionne parfaitement. Leset_header()
était ce qui manquait.set_header()
ajouterHTTP/1.1 404 Not Found
mais avez utiliséstatus_header()
dans votre code?Ce code a fonctionné pour moi:
la source
global $wp_query;
$wp_query->is_404 = true;
Je ne recommanderais pas de forcer un 404.
Si les moteurs de recherche vous inquiètent, pourquoi ne pas simplement faire une méta "sans index, sans suivi" sur ces pages et la bloquer avec le fichier robots.txt?
Cela peut être un meilleur moyen d'empêcher l'affichage du contenu.
Vous pourriez probablement aussi utiliser cette méthode pour charger,
404.php
mais j’estime que l’utilisation d’un modèle de page pourrait être une meilleure option.la source
la source
locate_template()
place. Je pense que cerobots.txt.
n'est pas un moyen garanti de se protéger de l'indexation. Certains moteurs de recherche peuvent toujours prendre la page. Je veux que la page ressemble à une page 404 normale. De plus, les articles vont être ajoutés dynamiquement, la modification durobots.txt
fichier ajoutera plus de problèmes.Ma solution:
la source
Les codes de statut sont envoyés dans les en-têtes des requêtes HTTP. Votre fonction actuelle est accrochée à un crochet qui sera appelé trop tard.
Vous devriez essayer d’accrocher votre fonction
rr_404_my_event()
à l’actionsend_headers
.Je ne sais pas si à ce moment-là, il est même possible de vérifier l'identifiant de la publication, mais essayez ceci:
la source
404.php
vous pourriez charger un autreheader.php
, par exemple<?php get_header('404'); ?>
pour chargerheader-404.php
. Dans cet en-tête, vous ajouteriezheader('HTTP/1.0 404 Not Found');
dans la<head>
section.Je voulais partager la façon dont j'ai utilisé la solution marquée
J'ai fait cela pour séparer tous les types d'utilisateurs de l' administrateur , dans ce projet, seul l'administrateur peut voir la
author.php
page.J'espère que cela pourrait aider quelqu'un d'autre.
la source