Шаблон перенаправления шаблона загружен, но заголовок 404
Я создал шаблон перенаправления для данного URL-адреса, например.: test.com/test
Тестовая страница не существует, я просто проверяю URL-адрес из query_vars, если он совпадает, я загружаю шаблон с помощью
include(file.php);
exit;
Страница загружается и показывает то, что я ожидаю, но заголовок страницы не найден. Я решаю эту проблему с помощью фильтра, но я увидел, что вся страница имеет статус 404. Кстати, я видел, что встроенное многосайтовое сообщение об активации также имеет заголовок 404. (Я работаю на локальном хосте.)
Как я могу решить эту проблему, не создавая саму страницу в wp?
1 answers
По сути, вы пытаетесь создать "поддельную" страницу без необходимости создавать физическую страницу в базе данных WordPress, и для этого вам понадобятся пользовательские правила перезаписи.
Для получения более подробной информации смотрите Мой ответ здесь: Настройка пользовательского вложенного пути для блога без использования страниц?
Краткий обзор:
Шаг 1: настройте свои собственные правила перезаписи
add_action('init', 'fake_page_rewrite');
function fake_page_rewrite(){
global $wp_rewrite;
//set up our query variable %test% which equates to index.php?test=
add_rewrite_tag( '%test%', '([^&]+)');
//add rewrite rule that matches /test
add_rewrite_rule('^test/?','index.php?test=test','top');
//add endpoint, in this case 'test' to satisfy our rewrite rule /test
add_rewrite_endpoint( 'test', EP_PERMALINK | EP_PAGES );
//flush rules to get this to work properly (do this once, then comment out)
$wp_rewrite->flush_rules();
}
Шаг 2: правильно включите файл шаблона для сопоставления переменной запроса,
add_action('template_redirect', 'fake_page_redirect');
function fake_page_redirect(){
global $wp;
//retrieve the query vars and store as variable $template
$template = $wp->query_vars;
//pass the $template variable into the conditional statement and
//check if the key 'test' is one of the query_vars held in the $template array
//and that 'test' is equal to the value of the key which is set
if ( array_key_exists( 'test', $template ) && 'test' == $template['test'] ) {
//if the key 'test' exists and 'test' matches the value of that key
//then return the template specified below to handle presentation
include( get_template_directory().'/your-template-name-here.php' );
exit;
}
}