更好看些|不用插件如何更改WordPress Page的固定链接格式

更好看些|不用插件如何更改WordPress Page的固定链接格式

前言:

WordPress的post、tag、category固定链接都可以在后台更改,唯独page不可以,page的默认SEO URL格式就是/%pagename%,结尾是否有反斜杠取决于设置的固定连接格式结尾是否有反斜杠。今天在WP Force看到修改page固定连接的方式,很激动,赶快记录下来。

这儿是代码:

修改page固定链接格式

假设一个页面的链接格式为

http://www.wpjun.com/guestbook

想改成

http://www.wpjun.com/page/guestbook.html

也就是加一个前缀page,再加一个后缀.html

将下面的代码放到functions.php中就可以实现

  1. add_action( ‘init’, ‘custom_page_rules’ );
  2. function custom_page_rules() {
  3.     global $wp_rewrite;
  4.     $wp_rewrite->page_structure = $wp_rewrite->root . ‘page/%pagename%.html’;
  5. }

保存后记得到后台->设置->固定链接中重新保存一下固定链接格式,更新rewrite rule,这样才能生效,否则就是404。

但有一个小问题。。。

Canonical URL带来的问题

注意下面两种固定连接格式,是有很大区别的

结尾有反斜杠
结尾有反斜杠

结尾没有反斜杠
结尾没有反斜杠

假如你使用第一种设置,那么

http://www.wpjun.com/guestbook

会自动被重定向到

http://www.wpjun.com/guestbook/

当你给page固定链接添加后缀时,会造成

http://www.wpjun.com/page/guestbook.html

被重定向到

http://www.wpjun.com/page/guestbook.html/

一个小小的反斜杠足以让你美梦破碎。这个反斜杠为什么会出现?因为WordPress有一个Canonical URL功能,也就是避免重复,当有多个地址指向同一个页面时,在WordPress看来只有一个是正确的,不正确的要被定向到正确的地址,这样对搜索引擎很友好。只是凡事都有个例外,我们要给page设定后缀,这个功能就不友好了。

那么就禁用这个功能,不可完全禁用,只是显示page时禁用。禁用的方法在function redirect_canonical()中有写,这个函数实在太长了,没有读下去的勇气,不过开发团队写了一句救命的注释。

  1. // Note that you can use the “redirect_canonical” filter to
  2. //cancel a canonical redirect for whatever reason by returning false
  3. $redirect_url = apply_filters(‘redirect_canonical’, $redirect_url$requested_url);

这样我们在page页面禁用Canonical url的代码如下

  1. add_filter(‘redirect_canonical’, ‘cancel_redirect_canonical’);
  2. function cancel_redirect_canonical($redirect_url)
  3. {
  4.     if( is_page()) return false;
  5.     return $redirect_url;
  6. }

实现修改page固定连接格式的完整代码如下

  1. add_action( ‘init’, ‘custom_page_rules’ );
  2. function custom_page_rules() {
  3.     global $wp_rewrite;
  4.     $wp_rewrite->page_structure = $wp_rewrite->root . ‘page/%pagename%.html’;
  5. }
  6. add_filter(‘redirect_canonical’, ‘cancel_redirect_canonical’);
  7. function cancel_redirect_canonical($redirect_url)
  8. {
  9.     if( is_page()) return false;
  10.     return $redirect_url;
  11. }

写在functions.php中可以用,但这种与主题关系不大的功能还是写成插件更合适。

记得在文章《如何修改自定义文章类型的固定链接》中和tiger同学讨论过为何将custom post type的链接格式改为后面带反斜杠的就搞出404错误,原来是WordPress自动更正URL的功能在搞怪。

写在后面:

据说这么改的话,搜索引擎更加喜欢呢。

本文参考于 http://www.solagirl.net/change-wordpress-page-permalinks.html  ,若有任何来源问题,请联系QQ:1516677079 及时更正。

最有意思的设计站点


最好的UI素材库

我们极力推荐: