¿Cómo genero programáticamente un 404?

5

¿Cómo puedo hacer que algo como esto funcione?

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

Básicamente, bajo ciertas condiciones, quiero decirle a WordPress que muestre su plantilla 404 (que puedo conectar más adelante si quiero) en lugar de la plantilla que está a punto de cargar (por ejemplo, una página o archivo).

Sé que solo podría hacer un redireccionamiento 302 a una página inexistente, pero eso es muy complicado. También podría enviar un encabezado HTTP 404 manualmente, pero luego no puedo usar la bonita página 404 de WP (ya tengo cosas que se enganchan en is_404() que necesitan ser despedidas en el momento adecuado).

    
pregunta dave1010 23.11.2012 - 15:23

2 respuestas

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

Por supuesto, eso enviará a todos ustedes la página a la plantilla 404. No sé cuáles son las condiciones para que esto pueda disparar o no disparar.

O para ser más cauteloso (ver comentarios) ...

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

Lo que parece funcionar:

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

Esto parece establecer los encabezados HTTP y cargar la plantilla correcta (con is_404() siendo verdadero).

    
respondido por el dave1010 23.11.2012 - 15:44

Lea otras preguntas en las etiquetas