前面教程講解了好幾篇關於 WordPress url 重寫和翻譯的,但是在實際操作中,我們會遇到各種問題。

怎樣除錯呢?我們需要知道,我們訪問的 url 被翻譯成了什麼,然後它又載入了哪一個模板檔案。

文章程式碼參考自:http://www.dev4press.com/2012/tutorials/WordPress/practical/debug-WordPress-rewrite-rules-matching/

一、翻譯規則。

首先往主題 functions.php 檔案中新增下面的函式:

  1. function dev4press_debug_rewrite_rules() {   
  2.   global $wp_rewrite;   
  3.   echo '<div>';   
  4.   if (!emptyempty($wp_rewrite->rules)) { //如果存在 url 翻譯   
  5.     echo '<h5>Rewrite Rules</h5>';   
  6.     echo '<table><thead><tr>';   
  7.     echo '<td>Rule</td><td>Rewrite</td>';   
  8.     echo '</tr></thead><tbody>';   
  9.     foreach ($wp_rewrite->rules as $name => $value) { //輸出翻譯規則   
  10.       echo '<tr><td>'.$name.'</td><td>'.$value.'</td></tr>';   
  11.     }   
  12.     echo '</tbody></table>';   
  13.   } else {   
  14.     echo 'No rules defined.';   
  15.   }   
  16.   echo '</div>';   
  17. }  

上面的程式碼如果呼叫的話,將會輸出網站的所有翻譯規則。

示例:在主題 index.php 中呼叫這個函式:

看到上面的圖,裡面有我們上幾篇教程中新增的 url 重寫規則。
二、當前 url 翻譯和模板呼叫
在 functions.php 中新增下面的函式:

  1. function dev4press_debug_page_request() {   
  2.   global $wp$template;   
  3.   define("D4P_EOL""
    "
    );   
  4.     
  5.   echo '<!-- Request: ';   
  6.   echo empty($wp->request) ? "None" : esc_html($wp->request); //輸出請求   
  7.   echo ' -->'.D4P_EOL;   
  8.   echo '<!-- Matched Rewrite Rule: ';   
  9.   echo empty($wp->matched_rule) ? None : esc_html($wp->matched_rule); //輸出翻譯   
  10.   echo ' -->'.D4P_EOL;   
  11.   echo '<!-- Matched Rewrite Query: ';   
  12.   echo empty($wp->matched_query) ? "None" : esc_html($wp->matched_query); //輸出查詢引數   
  13.   echo ' -->'.D4P_EOL;   
  14.   echo '<!-- Loaded Template: ';   
  15.   echo basename($template); //輸出模板名稱   
  16.   echo ' -->'.D4P_EOL;   
  17. }  

上面的函式呼叫,將會輸出當前訪問的 url 的翻譯規則、以及呼叫的模板。

示例:我們在 WordPress 的 header.php 檔案的<header> 標籤內呼叫這個函式。然後訪問一個 url 。

我訪問 url   www.ashuwo.com/95.html,然後檢視網頁原始碼,在 header 標籤中輸出了當前的翻譯過程,如下圖:

可以看到,我們的網頁請求是 95.html
匹配的翻譯規則為:([0-9]+).html(/[0-9]+)?/?$
翻譯的查詢為 p=95&page=
載入模板為:single.php

有了上面兩個函式,如果你的網站出現了 404 什麼的額,請使用上面兩個函式。