前面教程讲解了好几篇关于WordPress url重写和翻译的,但是在实际操作中,我们会遇到各种问题。
怎样调试呢?我们需要知道,我们访问的url被翻译成了什么,然后它又载入了哪一个模板文件。
文章代码参考自:Http://www.dev4press.com/2012/tutorials/wordpress/practical/debug-wordpress-rewrite-rules-matching/
一、翻译规则。
首先往主题functions.PHP文件中添加下面的函数:
function dev4press_debug_rewrite_rules() { global $wp_rewrite; echo '<div>'; if (!emptyempty($wp_rewrite->rules)) { //如果存在url翻译 echo '<h5>Rewrite Rules</h5>'; echo '<table><thead><tr>'; echo '<td>Rule</td><td>Rewrite</td>'; echo '</tr></thead><tbody>'; foreach ($wp_rewrite->rules as $name => $value) { //输出翻译规则 echo '<tr><td>'.$name.'</td><td>'.$value.'</td></tr>'; } echo '</tbody></table>'; } else { echo 'No rules defined.'; } echo '</div>'; } function dev4press_debug_page_request() { global $wp, $template; define("D4P_EOL", "\r\n"); echo '<!-- Request: '; echo empty($wp->request) ? "None" : esc_HTML($wp->request); //输出请求 echo ' -->'.D4P_EOL; echo '<!-- Matched Rewrite Rule: '; echo empty($wp->matched_rule) ? None : esc_html($wp->matched_rule); //输出翻译 echo ' -->'.D4P_EOL; echo '<!-- Matched Rewrite Query: '; echo empty($wp->matched_query) ? "None" : esc_html($wp->matched_query); //输出查询参数 echo ' -->'.D4P_EOL; echo '<!-- Loaded Template: '; echo basename($template); //输出模板名称 echo ' -->'.D4P_EOL; }
上面的代码如果调用的话,将会输出网站的所有翻译规则。
示例:在主题index.php中调用这个函数:
看到上面的图,里面有我们上几篇教程中添加的url重写规则。
二、当前url翻译和模板调用
在functions.php中添加下面的函数:
function dev4press_debug_rewrite_rules() { global $wp_rewrite; echo '<div>'; if (!emptyempty($wp_rewrite->rules)) { //如果存在url翻译 echo '<h5>Rewrite Rules</h5>'; echo '<table><thead><tr>'; echo '<td>Rule</td><td>Rewrite</td>'; echo '</tr></thead><tbody>'; foreach ($wp_rewrite->rules as $name => $value) { //输出翻译规则 echo '<tr><td>'.$name.'</td><td>'.$value.'</td></tr>'; } echo '</tbody></table>'; } else { echo 'No rules defined.'; } echo '</div>'; } function dev4press_debug_page_request() { global $wp, $template; define("D4P_EOL", "\r\n"); echo '<!-- Request: '; echo empty($wp->request) ? "None" : esc_html($wp->request); //输出请求 echo ' -->'.D4P_EOL; echo '<!-- Matched Rewrite Rule: '; echo empty($wp->matched_rule) ? None : esc_html($wp->matched_rule); //输出翻译 echo ' -->'.D4P_EOL; echo '<!-- Matched Rewrite Query: '; echo empty($wp->matched_query) ? "None" : esc_html($wp->matched_query); //输出查询参数 echo ' -->'.D4P_EOL; echo '<!-- Loaded Template: '; echo basename($template); //输出模板名称 echo ' -->'.D4P_EOL; }
上面的函数调用,将会输出当前访问的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什么的额,请使用上面两个函数。