Chức năng / bộ lọc WP để sửa đổi tiêu đề http?


17

Có chức năng, hành động hoặc bộ lọc WP chuyên dụng để sử dụng khi thêm / sửa đổi các tiêu đề HTTP không?

Bây giờ tôi chỉ cần nối một lệnh gọi tiêu đề () của PHP vào hook 'init' của WP như thế này:

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

Nhưng đây có phải là cách chính xác để làm điều đó?

Câu trả lời:


9

Các hành động init là sai nơi để làm điều đó. Một vị trí tốt hơn sẽ là tại template_redirect, do đó bạn chỉ ảnh hưởng đến giao diện người dùng của trang web chứ không phải khu vực quản trị viên.


điểm hay về hook, nhưng ngoài ra, việc gọi hàm 'raw' (sử dụng hook phải) đúng cách, hay có nên sử dụng trình bao bọc wp cho việc này không? Gọi trực tiếp tiêu đề chỉ cho phép thêm vào các tiêu đề, không sửa đổi chúng, giống như có thể với bộ lọc (như khi bạn muốn thao tác lớp cơ thể)
mikkelenameum

1
tiêu đề () là cách duy nhất. Tuy nhiên, nó có một tham số thứ hai sẽ cho phép bạn thay thế các tiêu đề hiện có thay vì thêm vào chúng. Xem php.net/manual/en/feft.header.php
Otto

14

Đây là mã tôi đã sử dụng, dựa trên câu hỏi ban đầu và câu trả lời của Dominic P ...

/*
 * 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');

Khi bạn đã thêm mã đó vào tệp tin.php của mình, bạn có thể kiểm tra mã này hoạt động bằng cách chạy thử nghiệm tại http://web-sniffer.net/ để đảm bảo các tiêu đề HTTP thực sự đã thay đổi.


11

Tôi biết đã được một thời gian, nhưng nếu có ai khác vấp phải điều này, tôi đã tìm thấy một móc nối WordPress đặc biệt để sửa đổi các tiêu đề HTTP. Cái móc là wp_headersvà nó được gọi trong lớp wp .

Đối số đầu tiên được thông qua là một mảng các tiêu đề với tên tiêu đề là khóa. Đối số thứ hai là một tham chiếu đến đối tượng lớp wp.


Có một cái móc khác : send_headers. Tôi không thấy bất kỳ "wp_headers" nào trong danh sách hook .
pixeline

Hmm, thật thú vị. Bạn kiểm tra bộ lọc wp_headers tại đây.
Đaminh P

Tôi nghĩ (nhưng không chắc chắn) rằng có các hook "nội bộ" (như wp_headers) và hook "công khai" (chẳng hạn như "send_headers"). Móc "nội bộ" dễ bị thay đổi hơn trong các phiên bản tương lai. Móc "công khai" được coi là "ổn định" hơn. Nhưng tôi có thể sai ở đây, tôi không tìm thấy bất kỳ nguồn nào để sao lưu cảm giác này mà tôi có được từ các nghiên cứu khác nhau mà tôi đã thực hiện trên móc.
pixeline

Điều đó là rất có thể, nhưng trong trường hợp này có vẻ như hai móc chỉ đơn giản là thực hiện các chức năng khác nhau. send_headerslà một hành động kích hoạt sau khi các tiêu đề được gửi trong khi wp_headerslà một bộ lọc trên các tiêu đề được áp dụng trước khi chúng được gửi.
Đaminh P

tốt ... nếu thực tế chỉ send_headerscó một trang codex là bất kỳ dấu hiệu nào sẽ sử dụng ...
drzaus

4

send_headerslà phương pháp ưa thích hơn wp_headerscho tình huống này như thể hiện trong codex .

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

Đây là lời giải thích của tôi tại sao về một câu hỏi tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.