Как программно генерировать 404?

Как я могу заставить что-то подобное работать?

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

В основном при определенных условиях я хочу сообщить WordPress, чтобы показать его шаблон 404 (который я могу подключить позже, если захочу) вместо шаблона, который он собирается загрузить (например, страница или архив).

Я знаю, что могу просто перенаправить 302 на несуществующую страницу, но это очень грязно. Я также могу отправить HTTP-заголовок 404 вручную, но тогда я не могу использовать хорошую страницу 404 WP (у меня уже есть вещи, которые подключаются к is_404() которые нужно уволить в нужное время).

Solutions Collecting From Web of "Как программно генерировать 404?"

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

Конечно, это приведет к отправке всей вашей страницы в шаблон 404. Я не знаю, каковы условия, что это должно срабатывать или не срабатывать.

Или быть более осторожным (см. Комментарии) …

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

Что, кажется, работает:

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

Кажется, это задает заголовки HTTP и загружает правильный шаблон (с is_404() является истинным).