問題描述

我不斷看到這種模式,並想知道它是什麼,WP 如何在內部使用它:

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;

具體的問題是 is_object($post) && empty($post->filter)。我看到這個 filter 屬性與其他對象相關聯。想知道它有什麼作用以及如何使用它?

編輯

我希望能夠獲得更多的投入!不幸的是,使用”filter” 的 Google 搜索只會導致 Filter hooks 等。這是一個很難獲得獨立信息的功能。比埃勒?

最佳解決方案

$ post-> 過濾器包含過濾內容的上下文。上下文可能類似於”display”,表示該帖子是要顯示在頁面上的。

這是由消毒功能完成的,以便在什麼情況下表明郵政數據被消毒。不同的環境得到不同類型的消毒。例如,”raw” 是未經歸類的數據。 “display” 可能已經經歷了 esc_html 功能,或者與該上下文有關的任何內容。 sanitize_post() 功能用於檢查 pre-existing 消毒,以防止雙重逃逸等。

$ post-> 過濾器的另一個用途是在 get_sample_permalink() 功能中。你會發現它在調用 get_permalink() 之前設置 $post->filter = 'sample'。這裏使用”sample” 表示 get_permalink 功能,並在下面進行編碼,該調用的目的是創建一個示例固定鏈接,用於在編輯後屏幕上顯示。這將改變下面的一些功能的工作方式。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。