Вопрос или проблема
Отобразить содержимое другой страницы с указанного URL.
Я искал плагины, учебные пособия и форумы, но не могу найти решение, которое мне нужно.
Например, у меня есть 2 сообщения с разным содержанием, которые находятся по адресам url-1
и url-2
. Что мне нужно, так это чтобы url-1
отображал содержание, которое есть у url-2
на уровне постоянной ссылки, я не хочу использовать внутренние функции, которые зависят от переменной $post
или функции get_post
. Поскольку я использую плагин кеширования, эти функции не будут работать, это должно быть на уровне URL постоянной ссылки или преобразования URL.
Содержание url-2 должно быть показано в url-1.
Графически:
url-1
= содержание 1
url-2
= содержание 2
Теперь я хочу, чтобы, когда они зайдут на url-1
, отображалось содержание 2 без изменения URL.
Чтобы добиться отображения содержания на уровне URL в WordPress без использования внутренних функций, которые зависят от переменной $post
или get_post
, мы можем воспользоваться действием template_redirect
вместе с преобразованием URL.
- Добавьте правила переписывания.
- Обработайте перенаправление.
Вот пример того, как это реализовать:
// Здесь мы добавили правила переписывания.
function custom_rewrite_rules() {
add_rewrite_rule( '^url-1/?$', 'index.php?pagename=url-2', 'top' );
}
add_action( 'init', 'custom_rewrite_rules' );
// Это для отображения содержания url-2 при доступе к url-1.
function load_template_for_url_1( $template ) {
if ( is_page( 'url-1' ) ) {
// Здесь мы получаем шаблон для url-2.
$new_template = locate_template( 'page-url-2.php' ); // Необходимо отрегулировать в зависимости от вашего файла шаблона.
if ( $new_template ) {
return $new_template;
}
}
return $template;
}
add_filter( 'template_include', 'load_template_for_url_1' );
// Это для сброса правил переписывания при активации
function flush_rewrite_on_activation() {
custom_rewrite_rules();
flush_rewrite_rules();
}
register_activation_hook( __FILE__ , 'flush_rewrite_on_activation' );
После выполнения описанных выше шагов нам нужно заменить url-1 и url-2 на фактические слайги ваших сообщений. После добавления этого кода, возможно, нам придется зайти на страницу Настройки > Постоянные ссылки
в WordPress, чтобы вручную сбросить правила переписывания. После этого нужно убедиться, что ваш плагин кеширования сконфигурирован для разрешения такого типа перенаправления.
Ответ или решение
Для отображения содержимого одной страницы на другой в WordPress, не используя внутренние функции, такие как переменная $post
или функция get_post
, можно воспользоваться механизмом перезаписи URL и действием template_redirect
. Данный подход позволит отобразить контент с url-2
на url-1
, сохраняя при этом URL url-1
.
Вот пошаговая инструкция по реализации этой задачи:
1. Добавление правил перезаписи
Сначала необходимо создать правила перезаписи для маршрутизации запросов от url-1
к контенту url-2
.
// Добавляем правила перезаписи.
function custom_rewrite_rules() {
add_rewrite_rule('^url-1/?$', 'index.php?pagename=url-2', 'top');
}
add_action('init', 'custom_rewrite_rules');
2. Обработка подгрузки шаблона
Далее создадим функцию, которая будет загружать шаблон для url-2
, когда пользователь обращается к url-1
:
// Обрабатываем загрузку шаблона для url-1.
function load_template_for_url_1($template) {
if (is_page('url-1')) {
// Находим шаблон для url-2.
$new_template = locate_template('page-url-2.php'); // Необходимо заменить на ваш файл шаблона.
if ($new_template) {
return $new_template;
}
}
return $template;
}
add_filter('template_include', 'load_template_for_url_1');
3. Очистка правил перезаписи при активации плагина
Для того чтобы правила перезаписи сработали, мы также добавим функцию, которая будет очищать правила при активации плагина:
// Очистка правил перезаписи при активации.
function flush_rewrite_on_activation() {
custom_rewrite_rules();
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'flush_rewrite_on_activation');
Настройка
- Замените
url-1
иurl-2
на фактические слаги ваших записей. - Можно получить доступ к странице
url-2
через файл шаблона, который вы используете для этой страницы. Убедитесь, что указанный путь к шаблону в функцииload_template_for_url_1
соответствует действительному шаблону вашего сайта. - Не забудьте перейти на страницу "Настройки > Постоянные ссылки" в админ-панели WordPress, чтобы обновить правила перезаписи вручную.
При соблюдении всех вышеперечисленных шагов, при переходе на url-1
будет отображаться контент с url-2
, оставаясь при этом на url-1
. Также убедитесь, что ваш плагин кеширования настроен так, чтобы позволять такую форму перенаправления.