Como faço para gerar um 404 programaticamente?

5

Como posso fazer algo como isso funcionar?

// 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());
});

Basicamente sob certas condições, eu quero dizer ao WordPress para mostrar seu template 404 (que eu posso ligar mais tarde se eu quiser) ao invés do template que ele está prestes a carregar (por exemplo, uma página ou arquivo).

Sei que posso fazer um 302 redirecionar para uma página inexistente, mas isso é muito confuso. Eu também poderia enviar um cabeçalho 404 HTTP manualmente, mas eu não posso usar a página 404 do WP (eu já tenho coisas que conectam em is_404() que precisam ser disparadas na hora certa).

    
por dave1010 23.11.2012 / 15:23

2 respostas

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

Claro, isso enviará toda a sua página para o modelo 404. Eu não sei quais são as condições para que isso seja disparado ou não.

Ou para ser mais cauteloso (ver comentários) ...

function generate_404_somehow() {
   global $wp_query;
   $wp_query->set_404();
}
add_action('wp','generate_404_somehow');
    
por s_ha_dum 23.11.2012 / 15:46
0

O que parece funcionar:

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

Isso parece definir os cabeçalhos HTTP e carregar o modelo correto (com is_404() sendo verdadeiro).

    
por dave1010 23.11.2012 / 15:44