前面教程讲解了好几篇关于 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 什么的额,请使用上面两个函数。