問題描述

如果您在主題中定義了 404 頁面,則如果在 $ wp_query-> query_vars 中定義了”tag”,則 Wordpress 將顯示 404 頁面,並且沒有與該標籤匹配的帖子。

我正在編寫一個插件,顯示每個頁面上的一些信息,以及帖子。我想改變 404 邏輯,以便如果沒有匹配標籤的帖子,並且插件無法拉出與該標籤相匹配的任何數據,則 404 頁面將被顯示。如果插件可以找到數據,我想顯示一個正常的頁面,不管該頁面上是否有帖子…

我一直是谷歌搜索,閲讀代碼,閲讀鱈魚,並在這裏戳,而且還沒有能夠弄清楚哪些 Wordpress 觸發了 404,以及如何覆蓋它。 (我有一種感覺,它可能與 functions.php 中的 status_header() 有關,但不清楚如何和何時需要鈎住它) 。

任何幫助/想法/啓發讚賞。

謝謝,

〜補丁

最佳解決方案

通過代碼和谷歌搜索更多的話,我找到了答案。它包含在 this thread 中 (請參閲 Otto42 的帖子),但為了記錄,將以下內容添加到插件將覆蓋 404 處理您指定的條件:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

請注意,您需要在 PHP 輸出標題之前將”is_404″ 設置為 false,這就是為什麼在 template_redirect 邏輯中掛接它是一個好主意。

〜補丁

次佳解決方案

我需要為一個總共有 200 頁的自定義項目做同樣的事情,發現您也可以簡單地將其添加到模板文件的頂部 ( get_header() 上面);

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

參考文獻

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