$ Object-> bộ lọc để làm gì?


7

Tôi tiếp tục nhìn thấy mô hình này và tự hỏi nó dùng để làm gì, WP sử dụng nó như thế nào trong nội bộ:

if ( empty($post) ) {
        if ( isset($GLOBALS['post']) )
            $_post = & $GLOBALS['post'];
        else
            return $null;
    } elseif ( is_object($post) && empty($post->filter) ) {
        _get_post_ancestors($post);
        $_post = sanitize_post($post, 'raw');
        wp_cache_add($post->ID, $_post, 'posts');
    } else {
        if ( is_object($post) )
            $post_id = $post->ID;
        else
            $post_id = $post;

Các dòng cụ thể trong câu hỏi là is_object($post) && empty($post->filter). Tôi đã thấy filtertài sản này liên quan đến các đối tượng khác là tốt. Tự hỏi nó làm gì và làm thế nào nó có thể được sử dụng?

BIÊN TẬP

Tôi hy vọng sẽ nhận được nhiều đầu vào hơn về điều này! Thật không may, một tìm kiếm Google có "bộ lọc" trong đó chỉ bật các móc lọc, v.v ... Đây là một khó khăn để có được thông tin độc lập. Buehler?


Gần đây tôi đã đi qua điều này . Scribu cũng cho biết nơi này được sử dụng trong các thử nghiệm.
kaiser

@Rarst Tôi không chắc đây là bản sao chính xác như thế nào. Tôi đang tìm kiếm một lời giải thích về thuộc tính bộ lọc trên một số đối tượng bên trong, cách sử dụng và cách sử dụng nó. Câu hỏi báo cáo lỗi mà bạn liên kết để chắc chắn đề cập đến thuộc tính bộ lọc, nhưng không làm gì cả khi giải thích nó.
Tom Auger

Không phải là một bản sao chính xác. Câu hỏi khác là chạy vào một vấn đề $post->filtercần được đặt ra. Nó không giải thích nó là gì, tại sao nó ở đó, hoặc nó được sử dụng như thế nào trong lõi. Tôi đồng ý với 2 phiếu bầu để mở lại.
EAMann

Điều đó có vẻ như bao quát hơn về chủ đề này, tôi có thể đã đánh giá sai. :) Dù sao cũng mở cửa trở lại nên tất cả đều tốt.
Rarst

Câu trả lời:


5

Bộ lọc $ post-> chứa ngữ cảnh theo đó nội dung của bài đăng đã được lọc. Bối cảnh có thể là một cái gì đó như "hiển thị" cho thấy bài viết có nghĩa là sẽ được hiển thị trên trang.

Điều này được thực hiện bởi các chức năng khử trùng, để chỉ ra trong bối cảnh nào dữ liệu bài được vệ sinh. Các bối cảnh khác nhau có được các loại vệ sinh khác nhau. "thô", ví dụ, là dữ liệu không được xác nhận. "display" có thể đã đi qua hàm esc_html hoặc bất cứ điều gì có liên quan đến bối cảnh đó. Hàm sanitize_post () sử dụng chức năng này để kiểm tra vệ sinh trước đó, để ngăn chặn việc thoát khỏi mọi thứ và vv.

Một cách sử dụng khác cho bộ lọc $ post-> là trong hàm get_sample_permalink (). Bạn sẽ thấy rằng nó đặt $post->filter = 'sample'trước khi gọi get_permalink (). Việc sử dụng "mẫu" ở đây biểu thị cho hàm get_permalink và mã bên dưới nó, mục đích của cuộc gọi này là tạo một permalink mẫu để hiển thị trên màn hình chỉnh sửa bài đăng. Điều này sẽ thay đổi cách một số chức năng bên dưới nó hoạt động.


Cảm ơn @Otto rất nhiều vì đã dành thời gian để làm rõ điều này. Làm cho cảm giác hoàn hảo bây giờ. Nó có được khuyến khích để f $% @ với filtergiá trị này cho mục đích riêng của mình (trong một plugin), theo cùng triết lý cung cấp ngữ cảnh cho bộ lọc gần đây nhất trên bài đăng không? Tôi không thể nghĩ ra một ví dụ rõ ràng ngay bây giờ, chỉ tự hỏi liệu điều này có nên được coi là "chỉ đọc" cho các nhà phát triển plugin / theme không?
Tom Auger

Ồ, một điều nữa: trong ví dụ mã của tôi ở trên, nó kiểm tra xem có filtertrống không. Nếu có, nó vệ sinh bài viết, chuyển "thô" làm tham số. Có an toàn không khi nói rằng nếu bộ lọc được đặt thành "thô" thì điều đó cũng tương tự như không có bộ lọc nào cả: nghĩa là, bài đăng vẫn chưa được xác thực?
Tom Auger

2
Về cơ bản, bạn sẽ gọi sanitize_post($post, $context)với ngữ cảnh của bạn. Nó chuyển từng lĩnh vực trong bài xuống sanitize_post_field($field, $post->$field, $post->ID, $context)với bối cảnh của bạn là tốt. Các ngữ cảnh được xây dựng là: 'thô', 'chỉnh sửa', 'db', 'hiển thị', 'thuộc tính' và 'js'. Mặc định là "hiển thị" và về cơ bản nó chạy apply_filters("post_{$field}", $value, $post_id, $context)trên trường. Bạn có thể nối vào đây và phát hiện bối cảnh tùy chỉnh của mình và hành động tương ứng. Giá trị bộ lọc tự động trở thành bối cảnh khi sanitize_post hoàn thành.
Otto

1

@Shaan: Tôi không nghĩ rằng Tom đang tìm kiếm một mô tả về API Plugin WP. Anh ta đang tìm kiếm một mô tả về tài sản đối tượng filtermà bạn nhận được như là kết quả của WP_Query. Ví dụ: nếu bạn sử dụng get_posts():

stdClass Object
(
    // other post properties
    [filter] => raw
)

Tôi không biết liệu tài sản này được sử dụng trong WordPress ở đâu và ở đâu. Sau khi nhìn xung quanh trong mã nguồn, tôi nghĩ rằng nó không được sử dụng ở bất cứ đâu vào lúc này.

Chỉ cần suy đoán ở đây. Giá trị mặc định là rawcho tất cả các bài viết cho đến nay. Có thể là các nhà phát triển cốt lõi muốn thêm bộ lọc trên mỗi cơ sở bài đăng. Ví dụ: nếu bạn chỉ muốn cho phép một số thành phần HTML nhất định bên trong nội dung bài đăng, bạn có thể tạo bộ lọc sanitizeHtml, đính kèm nó vào bài đăng và WordPress sẽ làm phần còn lại cho bạn.


Nó thực sự được sử dụng khá nhiều, thường là một phần của bài kiểm tra để xem liệu nó có trống hay không. Tôi không chắc chắn rằng liệu các giá trị được sử dụng. Tôi đang tự hỏi làm thế nào / khi nào nó được phổ biến và ý nghĩa của nó nếu không.
Tom Auger
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.