web-dev-qa-db-de.com

Wie erstelle ich programmgesteuert einen 404?

Wie kann ich so etwas zum Laufen bringen?

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

Grundsätzlich möchte ich WordPress unter bestimmten Bedingungen anweisen, seine 404-Vorlage (in die ich später einbinden kann, wenn ich möchte) anstelle der Vorlage anzuzeigen, die gerade geladen wird (z. B. eine Seite oder ein Archiv).

Ich weiß, ich könnte einfach eine 302 Weiterleitung zu einer nicht existierenden Seite machen, aber das ist sehr chaotisch. Ich könnte auch manuell einen 404 HTTP-Header senden, aber dann kann ich die Nice 404-Seite von WP nicht verwenden (ich habe bereits Dinge, die sich in is_404() einklinken und zum richtigen Zeitpunkt ausgelöst werden müssen).

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

Dadurch wird natürlich Ihre gesamte Seite an die 404-Vorlage gesendet. Ich weiß nicht, unter welchen Bedingungen dies ausgelöst werden soll oder nicht.

Oder um vorsichtiger zu sein (siehe Kommentare) ...

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

Was scheint zu funktionieren:

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

Dies scheint die HTTP-Header zu setzen und die richtige Vorlage zu laden (wobei is_404() wahr ist).

0
dave1010