Как вывести 404 страницу по определенному адресу?
Есть сайт на wordpress.
Как сделать сделать так, чтобы любая ошибочная страница вела по пути сайт/error/404 и выводился шаблон 404.php (лежит в корне сайта)?
Делаю вот так, но не работает как ожидал, адрес прописывается верный, но сам шаблон не подтягивается
add_action( 'template_redirect', '404_error_redirect' );
function 404_error_redirect()
{
if( is_404())
{
wp_redirect( home_url( '/error/404' ) );
exit();
}
}
Ответы (2 шт):
Автор решения: WP Punk
→ Ссылка
Вам нужно добавить хук на wp и изменить стандартное поведение. Редиректите все страницы на нужную вам, а если это нужная вам, то отдаете 404. Код примерно такой:
function my_404_for_page() {
if ( ! is_404() ) {
return;
}
global $wp_query;
if ( '/error/404' === $_SERVER['REQUEST_URI'] ) {
$wp_query->set_404();
status_header( 404 );
}
wp_redirect( home_url( '/error/404' ) );
exit();
}
add_action( 'wp', 'my_404_for_page' );
Автор решения: KAGG Design
→ Ссылка
Вот исправленный и протестированный код из ответа WP Punk.
function my_404_for_page() {
if ( ! is_404() ) {
return;
}
$request_uri = isset( $_SERVER['REQUEST_URI'] ) ? filter_var( $_SERVER['REQUEST_URI'], FILTER_SANITIZE_STRING ) : '';
if ( '/error/404' === $request_uri ) {
get_header();
require_once ABSPATH . '404.php';
get_footer();
exit();
}
wp_safe_redirect( home_url( '/error/404' ) );
exit();
}
add_action( 'wp', 'my_404_for_page' );