wordpress进阶教程(二十一):wordpress固定链接调试

前面教程讲解了好几篇关于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 (!empty($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中调用这个函数:

wordpress输出所有重写规则

看到上面的图,里面有我们上几篇教程中添加的url重写规则。
二、当前url翻译和模板调用
在functions.php中添加下面的函数:

  1. function dev4press_debug_page_request() {
  2.   global $wp$template;
  3.   define("D4P_EOL""\r\n");
  4.   echo '<!-- Request: ';
  5.   echo empty($wp->request) ? "None" : esc_html($wp->request); //输出请求
  6.   echo ' -->'.D4P_EOL;
  7.   echo '<!-- Matched Rewrite Rule: ';
  8.   echo empty($wp->matched_rule) ? None : esc_html($wp->matched_rule); //输出翻译
  9.   echo ' -->'.D4P_EOL;
  10.   echo '<!-- Matched Rewrite Query: ';
  11.   echo empty($wp->matched_query) ? "None" : esc_html($wp->matched_query); //输出查询参数
  12.   echo ' -->'.D4P_EOL;
  13.   echo '<!-- Loaded Template: ';
  14.   echo basename($template); //输出模板名称
  15.   echo ' -->'.D4P_EOL;
  16. }

上面的函数调用,将会输出当前访问的url的翻译规则、以及调用的模板。

示例:我们在wordpress的header.php文件的<header>标签内调用这个函数。然后访问一个url。

我访问url   www.ashuwo.com/95.html,然后查看网页源代码,在header标签中输出了当前的翻译过程,如下图:

wordpress重写规则调试

可以看到,我们的网页请求是 95.html
匹配的翻译规则为:([0-9]+).html(/[0-9]+)?/?$
翻译的查询为 p=95&page=
载入模板为:single.php

有了上面两个函数,如果你的网站出现了404什么的额,请使用上面两个函数。

已有13条评论

  1. Leniy
    Leniy : 回复

    太感谢了,我目前的主题用的准备修改feed文件,又不能更改wp-include的文件,就用这个了

  2. 无量
    无量 : 回复

    代码看着都头痛

  3. 全新优惠码
    全新优惠码 : 回复

    这几篇文章都好复杂,得慢慢消化

  4. moand
    moand : 回复

    啊树哥、自定义类型的文章页面显示不了栏目的title标题!  我要的文章页面标题是这样的         文章一_分类一_XX网    

  5. monad
    monad : 回复

    比如我有10个分类每个分类100篇文章、(共1000篇文章)就像小说目录是形式、10个分类的1000个文章都设置一个标签(假设为都市小说)当我点击这个都市小说的标签他把10个分类目录名称显示出来、而不是显示10个目录里面的1000个文章!

    • 阿树工作室
      阿树工作室 回复monad: 回复

      额。。。还是要申明:标题按和分类是毫不相干的。你给1000篇文章设置同一个标签、和你把这1000篇文章放同一个分类是一样的。标签等同于分类。。

      但是你要的这个,你何不给这10个分类都设置一个父级分类。这样,这10个分类就附属于同一个分类。你这个通过标签来调用分类是不太现实的,灰常不合理的。

  6. monad
    monad : 回复

    自定义分类下怎么在循环里面只显示这个分类的文章并且倒序显示全部文章、百度谷歌都查不到、我不想在后台设置成统一的!

    • 阿树工作室
      阿树工作室 回复monad: 回复

      分类下面只显示这个分类的文章不是很正常吗?

      • monad
        monad 回复阿树工作室: 回复

        不是这样的啊! 我在自定义分类模版里面用query_posts函数控制文章为升序的(默认为倒序)、并且显示这个分类全部文章(默认后台设置24篇、)比如我自定义相册类型有俩分类(我要相册分类一的文章升序并且全部显示出来、而分类二的文章按照后台设置的降序24篇显示出来!)

        • 阿树工作室
          阿树工作室 回复monad: 回复

          那你就给分类添加一个字段用来设置该分类是升序还是降序,然后在模板中再用query_posts来改。。

          <?php query_posts($query_string . "&order=ASC"); ?>
  7. MONAD
    MONAD : 回复

    啊树哥、再帮我一个问题好吗、默认点击一个标签是把相关标签的每篇文章都显示出来、我想问问你能不能点击标签的时候不是吧每篇文章显示出来、而是设置了那个标签的分类目录名称、

    • 阿树工作室
      阿树工作室 回复MONAD: 回复

      设置了标签的分类目录名称?  标签和分类是互相独立的分类法。。。。。不存在给标签设置分类,或者给分类设置标签

  8. ice cube machine
    ice cube machine : 回复

    sdgfdsjmhn,hj,hjb,

发表评论