WP функция / фильтр для изменения заголовков http?


17

Существует ли специальная функция WP, действие или фильтр для добавления / изменения заголовков HTTP?

На данный момент я просто подключаю вызов header () PHP к хуку WP 'init' следующим образом:

add_action('init', 'add_header_xua');
function add_header_xua(){
    if(!is_admin()){
        header('X-UA-Compatible: IE=edge,chrome=1');    
    }
}

Но так ли это правильно?

Ответы:


9

Действие init - это неправильное место для этого. Лучшее место было бы в template_redirect, чтобы вы влияли только на внешний вид сайта, а не на области администратора.


Хороший вопрос в отношении хука, но кроме этого, является ли правильный вызов функции raw () с помощью правого хука, или для этого нужно использовать обертку wp? Вызов заголовка напрямую позволяет только добавлять заголовки, но не изменять их, как это было бы возможно с помощью фильтра (например, когда вы хотите манипулировать классом тела)
mikkelbreum

1
header () - единственный способ. Однако у него есть второй параметр, который позволит вам заменить существующие заголовки вместо добавления к ним. См. Php.net/manual/en/function.header.php
Отто

14

Вот код, который я использовал, основываясь на исходном вопросе и ответе Доминика П ...

/*
 * Modify HTTP header
 */
function add_header_xua($headers) {

    // var_dump($headers); #=> if you want to see the current headers...  

    if (!is_admin()) {
        $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';    
    }

    return $headers;     
}
add_filter('wp_headers', 'add_header_xua');

Добавив этот код в свой файл functions.php, вы можете проверить его работоспособность, запустив тест на http://web-sniffer.net/, чтобы убедиться, что заголовки HTTP действительно изменились.


11

Я знаю, что это было давно, но если кто-то еще наткнулся на это, я нашел хук WordPress специально для изменения заголовков HTTP. Хук есть wp_headersи он вызывается в классе wp .

Первый передаваемый аргумент - это массив заголовков с именем заголовка в качестве ключа. Второй аргумент - это ссылка на объект класса wp.


Существует еще один крюк: send_headers. Я не вижу никаких "wp_headers" в списке хуков .
pixeline

Хм, это интересно. Вы проверяете фильтр wp_headers здесь.
Доминик П

Я думаю (но не уверен), что есть "внутренние" хуки (такие как wp_headers) и "публичные" хуки (такие как "send_headers"). «Внутренние» хуки более подвержены изменению в будущих версиях. «публичные» крючки считаются более «стабильными». Но я могу ошибаться, я не могу найти источник, подтверждающий это чувство, которое я получил от различных исследований, которые я проводил на крючках.
pixeline

Это очень возможно, но в этом случае похоже, что два хука просто выполняют разные функции. send_headersэто действие, которое запускается после отправки заголовков, а wp_headersфильтр заголовков применяется до их отправки.
Доминик П

хорошо ... если только факт send_headers есть страница кодекса, является признаком того, что использовать ...
drzaus

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.