web-dev-qa-db-fra.com

Comment générer par programme une 404?

Comment puis-je obtenir quelque chose comme ça au travail?

// in a plugin / theme:
// This imaginary function will make WordPress think that the 
// current request is a 404. 
// Ideally this function could be ran anywhere, but realistically it
// will probably have to be before the template_redirect hook runs.
generate_404_somehow();

// later...
add_action('template_redirect', function() {
    // should be "true"
    var_dump(is_404());
});

Fondamentalement, sous certaines conditions, je souhaite dire à WordPress de montrer son modèle 404 (que je pourrai accrocher ultérieurement si je le souhaite) au lieu du modèle qu’il est sur le point de charger (par exemple une page ou une archive).

Je sais que je pourrais faire une redirection 302 vers une page inexistante, mais c'est très compliqué. Je pourrais aussi envoyer un en-tête HTTP 404 manuellement, mais je ne peux pas utiliser la page Nice 404 de WP (j'ai déjà des problèmes liés à is_404() qui doivent être déclenchés au bon moment).

6
dave1010
function generate_404_somehow() {
   global $wp_query;
   $wp_query->is_404 = true;
}
add_action('wp','generate_404_somehow');

Bien sûr, cela vous enverra tous la page vers le modèle 404. Je ne sais pas quelles sont les conditions pour que cela déclenche ou non.

Ou pour être plus prudent (voir commentaires) ...

function generate_404_somehow() {
   global $wp_query;
   $wp_query->set_404();
}
add_action('wp','generate_404_somehow');
6
s_ha_dum

Ce qui semble fonctionner:

global $wp_query;
$wp_query->set_404();
$wp_query->max_num_pages = 0; // stop theme from showing Next/Prev links

Cela semble définir les en-têtes HTTP et charger le bon modèle (avec is_404() étant vrai).

0
dave1010