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');    
    }
}

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

mikkelbreum
источник

Ответы:

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
4

send_headersявляется предпочтительным методом wp_headersдля этой ситуации, как показано в кодексе .

is_admin() || add_action('send_headers', function(){ 
    header('X-UA-Compatible: IE=edge,chrome=1'); 
}, 1);

Вот мое объяснение, почему по аналогичному вопросу.

Брайан Уиллис
источник