Изменить заголовки wp на конкретной странице

Вопрос или проблема

Я пытаюсь изменить заголовок cache-control для определенного поста (1234). Попробовал добавить следующее в конец моего functions.php:

add_filter('wp_headers', 'wp_test_headers');
function wp_test_headers($headers)
{
    if ( is_single ( 1234) ) {
       $headers['Cache-Control']="no-store, no-cache, must-revalidate, max-age=0";
    }
    return $headers;
}

Однако, когда я открываю страницу поста в браузере, условие никогда не выполняется. Должен ли я добавлять фильтр в другое место или проблема в чем-то другом?

из Как изменить HTTP-заголовки только для постов определенной категории из плагина:

add_action( 'template_redirect', 'update_header_cache' );
function update_header_cache() {
    if( is_single( 1234) ) {
        header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
        header('Pragma: no-cache');
        header('Expires: Thu, 01 Dec 1990 16:00:00 GMT');
    }
}

Проблема в вашем коде возникает, потому что фильтр wp_headers запускается слишком рано в процессе выполнения WordPress, чтобы использовать условные теги, такие как is_single(), для определения текущей страницы. Чтобы достичь желаемого результата, используйте hook template_redirect, который выполняется в нужный момент для изменения заголовков на основе контекста текущей страницы. Вот как это сделать:

add_action(‘template_redirect’, ‘modify_cache_control_header’);
function modify_cache_control_header() {
if (is_single(1234)) {
header(‘Cache-Control: no-store, no-cache, must-revalidate, max-age=0’);
header(‘Pragma: no-cache’);
header(‘Expires: Thu, 01 Jan 1970 00:00:00 GMT’);
}
}

.

Ответ или решение

Теория

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

Для успешной модификации заголовков на уровне конкретного поста следует использовать хук template_redirect, который позволяет точно определить контекст страницы перед её окончательной отгрузкой в браузер.

Пример

Давайте посмотрим на корректный пример кода, который реализует решение:

add_action('template_redirect', 'modify_cache_control_header');

function modify_cache_control_header() {
    if (is_single(1234)) {
        header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
        header('Pragma: no-cache');
        header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
    }
}

В данном коде хук template_redirect используется для вызова функции modify_cache_control_header, которая в свою очередь проверяет, является ли текущая страница постом с ID 1234. Если это так, она устанавливает необходимые заголовки кэширования.

Применение

Чтобы применить это решение, выполните следующие шаги:

  1. Откройте файл functions.php: Перейдите в вашу административную панель WordPress и откройте редактор тем, выбрав файл functions.php активной темы.

  2. Добавьте код в functions.php: Вставьте приведенный выше код в functions.php. Убедитесь, что вы не нарушаете синтаксис PHP, и включите защиту от инъекций, предусмотрев корректное закрытие и открытие тэгов PHP.

  3. Проверьте результаты: Откройте браузер и навигацию к посту с ID 1234, чтобы убедиться, что заголовки изменены как ожидалось. Вы можете использовать инструменты разработчика вашего браузера для проверки HTTP-заголовков.

Это решение корректно выполняет поставленную задачу, обеспечивая изменение заголовков HTTP для указанного поста за счёт использования подходящего хука WordPress и проверки текущего контекста страницы.

Оцените материал
Добавить комментарий

Капча загружается...