麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > CMS > Wordpress > 正文

WordPress固定鏈接修改成日期 作者的形式

2024-09-07 00:51:00
字體:
來源:轉載
供稿:網友

在烏徒幫修改了固定鏈接形式之后,把形式修改為/post/%post_id%/%postname%.html的形式,但是在這之后出現了一個問題,就算日期、作者頁面的URL前面多了一個post.例如/post/author/frustigor,/post/date/2014/04,這就很奇怪了,非常不好看,也沒有必要,我們想要的結果三/author/name和/date/year/month的形式,怎么來修理呢?這篇文章告訴你答案.

1.你必須了解的事

我們需要先了解這些事實:1.你必須通過編寫wordpress相關的php程序才能解決這個問題,2.你必須懂,這個問題關系著兩個東西,一個是鏈接,例如“2014年3月”這個邊側欄里面的鏈接必須修改為鏈接到不帶post的URL,另外一個是重寫,你得讓wordpress知道這個URL是用來調用月份的歸檔欄目的.

這兩個問題可是比較難懂的,你要是對wordpress的開發一竅不通,就直接往下拖,如果你對實現原理比較感興趣,就慢慢往下看.

2.如何修改鏈接,使點擊鏈接進入我們想要的URL.

這個其實沒有那么難,非常簡單,wordpress里面有一些hook,可以直接實現這個效果,主要是year_link、month_link、day_link、author_link,怎么用呢?代碼如下:

  1. add_filter('author_link','archive_rewrite_link', 99, 2); 
  2. add_filter('day_link','archive_rewrite_link', 99, 2); 
  3. add_filter('month_link','archive_rewrite_link', 99, 2); 
  4. add_filter('year_link','archive_rewrite_link', 99, 2); 
  5. function archive_rewrite_link($link){ 
  6.  global $wp_rewrite
  7.  $front = ltrim($wp_rewrite->front,'/'); 
  8.  $link = str_replace_first($front,'',$link); 
  9.  return $link

上面的str_replace_first是我自己寫的一個函數,往下拖,在全部代碼里面可以看到,非常簡潔的一段代碼,刷新看看,是不是這些鏈接都修改了,不過不要高興的太早,鏈接是修改過來了,但是不要高興的太早,是不是看到404了,對的,wordpress還根本不知道你已經修改過鏈接了.

3.為wordpress增加重寫規則,讓修改后的鏈接可以被正常訪問.

在wordpress里面有個叫rewrtie的全局類,這個類超級厲害,決定了你當前訪問的URL會顯示什么內容,如果你去看別人寫的有關這方面的文章,絕對會嚇死你,里面的邏輯非常復雜,不過,不用擔心,我們這里給一個極其簡單的代碼就可以實現.代碼如下:

  1. add_filter('author_rewrite_rules','archive_rewrite_rules',99); 
  2. add_filter('date_rewrite_rules','archive_rewrite_rules',99); 
  3. function archive_rewrite_rules($rules){ 
  4.  global $wp_rewrite
  5.  $front = ltrim($wp_rewrite->front,'/'); 
  6.     foreach($rules as $key => $value){ 
  7.         $newrules[str_replace_first($front,'',$key)] = $value
  8.     } 
  9.     return $newrules

有沒有發現,比前面一段代碼還短,其實道理也很簡單,在URL被解析之前,我們通過修改全局類$wp_rewrite變量,即可實現我們的目的,(這種方法非常投機取巧,因為對于wordpress本身而言,數據庫里面的重寫規則沒有變,不過,這有什么關系呢?我們可以實現自己的效果就好了)

4.完整的代碼

如果你是小白,把下面的代碼拷貝到你的主題目錄中的functions.php文件中,注意,一定要放在<?php ?>里面,代碼如下:

  1. // 替換字符串中第一次出現的子串 
  2. if(!function_exists('str_replace_first')): 
  3. function str_replace_first($find,$replace,$string){ 
  4.  $position = strpos($string,$find); 
  5.  if($position !== false){ 
  6.   $length = strlen($find);  
  7.   $string = substr_replace($string,$replace,$position,$length); 
  8.   return $string
  9.  }else
  10.   return false; 
  11.  } 
  12. }  
  13. endif
  14.  
  15. // 首先,修改網頁里面的鏈接 
  16. add_filter('author_link','archive_rewrite_link', 99, 2); 
  17. add_filter('day_link','archive_rewrite_link', 99, 2); 
  18. add_filter('month_link','archive_rewrite_link', 99, 2); 
  19. add_filter('year_link','archive_rewrite_link', 99, 2); 
  20. function archive_rewrite_link($link){ 
  21.  global $wp_rewrite
  22.  $front = ltrim($wp_rewrite->front,'/'); 
  23.  $link = str_replace_first($front,'',$link); 
  24.  return $link
  25.  
  26. // 接著,修改重寫規則 
  27. add_filter('author_rewrite_rules','archive_rewrite_rules',99); 
  28. add_filter('date_rewrite_rules','archive_rewrite_rules',99); 
  29. function archive_rewrite_rules($rules){ 
  30.  global $wp_rewrite
  31.  $front = ltrim($wp_rewrite->front,'/'); 
  32.     foreach($rules as $key => $value){ 
  33.         $newrules[str_replace_first($front,'',$key)] = $value
  34.     } 
  35.     return $newrules

這里也給了不少有關URL的思路,例如今后你可以通過修改$wp_rewrite來快速實現修改author頁面的前綴了,例如你可以把你的作者頁面修改為/user/user_id的形式,是不是很酷.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久一区二区三区 | 56av国产精品久久久久久久 | 欧美成人免费tv在线播放 | 久久精品亚洲精品国产欧美kt∨ | 成人羞羞国产免费游戏 | 五月婷婷第四色 | 色淫影院 | 成人免费在线网 | 视频一区二区三区在线播放 | 91九色视频在线播放 | 欧洲成人一区 | 亚洲精品a级 | a一级黄 | www.91在线观看 | 午夜天堂在线视频 | 国产精品爆操 | 黄色高清免费网站 | 禁漫天堂久久久久久久久久 | 中文字幕在线视频日本 | 新久久久久久 | 国产一区二区三区在线视频 | 日韩视频一区二区在线观看 | 欧美伦理一区二区 | 国产午夜精品在线 | 12av电影| www.guochanav.com | 久久国产精品二国产精品中国洋人 | 欧美城网站地址 | 综合精品一区 | 午夜影院在线免费观看 | 欧美14一15sex性hd | 一区二区三区日韩在线观看 | 777午夜精品视频在线播放 | 国产色片在线观看 | 国产精品久久久麻豆 | 日韩a毛片免费观看 | 久久精品国产99久久6动漫亮点 | 在线中文字幕不卡 | av成人免费| 日本一区二区在线 | 欧美黄色免费视频 |