問題描述
如果您在主題中定義了 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。