WordPress如何?偽靜態加html尾碼

來源:互聯網
上載者:User
WordPress如何?偽靜態加html尾碼?本文給大家分享的是在使用WordPress的過程中,發現其內容頁分頁的形式非常的不友好,於是就動手進行修改的過程以及詳細代碼,非常的實用,推薦給大家。希望對大家有所協助。

問題

當文章有分頁的時候,WordPress產生的永久連結是page.html/2的形式,前面一段是文章的$link,後面的數字代表分頁$number。那麼問題來了,挖掘……不對,從邏輯上講這到底是個html檔案還是一個目錄呢?

難看

在.html這個靜態檔案後面加上一個/和數字簡直令人摸不著頭腦,這還只是其次,重要的是,我發現搜尋引擎根本不收錄這樣奇怪的連結,這個真是無法接受,我寫的東西首尾都很重要,不能因為分個頁就被忽視了。

不收錄

拿這篇文章來看,搜尋文章第一頁的內容,Google收錄了:

搜尋文章第二頁和第三頁的內容,根本沒有收錄:

解決方案

於是我決定DIY WordPress的連結產生與解析規則。

思路

利用filter wp_link_pages_link 將分頁連結/123456重寫為page-[123456].html。

利用WordPress或者伺服器的RewriteRule將page-[123456].html還原為/123456

添加鉤子redirect_canonical,防止WordPress從page-[123456].html到/123456的強行跳轉。

產生分頁html尾碼連結

給WordPress主題加入:


class Rewrite_Inner_Page_Links{  var $separator;  var $post_rule;   function __construct()  {    $this->separator = '/page-';    // (.+?)/([^/]+).html(/[0-9]+)?/?    $this->post_rule = '(.+?)/([^/]+)(' . $this->separator . '([0-9]+))+.html/?$';    if (!is_admin() || defined('DOING_AJAX')) :      add_filter('wp_link_pages_link', array($this, 'inner_page_link_format'), 10, 2); // for inner pages      add_filter('redirect_canonical', array($this, 'cancel_redirect_for_paged_posts'), 10, 2);    endif;    if (is_admin()) :      add_filter('rewrite_rules_array', array($this, 'pagelink_rewrite_rules'));    endif;  }   /**   * 修改post分頁連結的格式   * @param string $link   * @param int $number   * @return string   */  function inner_page_link_format($link, $number)  {    if ($number > 1)    {      if (preg_match('%<a href=".*\.html/\d*"%', $link))      {        $link = preg_replace("%(\.html)/(\d*)%", $this->separator . "$2$1", $link);      }    }    return $link;  }   /**   * 為新的連結格式增加重新導向規則,移除原始分頁連結的重新導向規則,防止重複收錄   *   * 訪問原始連結將返回404   * @param array $rules   * @return array   */  function pagelink_rewrite_rules($rules)  {    $new_rule[$this->post_rule] = 'index.php?name=$matches[2]&page=$matches[4]';    return $new_rule + $rules;  }   /**   * 禁止WordPress將頁面分頁連結跳轉到原來的格式   * @param string $redirect_url   * @param string $requested_url   * @return bool   */  function cancel_redirect_for_paged_posts($redirect_url, $requested_url)  {    global $wp_query;    if (is_single() && $wp_query->get('page') > 1)    {      return false;    }    return true;  }} new Rewrite_Inner_Page_Links();

這樣就得到了將類似http://www.***.com/program/tokyodaigaku.html/2/ 的分頁連結轉化為形如 http://www.***.com/program/tokyodaigaku/page-2.html 的連結。

注意,我的偽靜態規則是/%category%/%postname%.html,如果你的規則不同,請自行修改代碼或者偽靜態規則。

重寫URL規則

如果不重寫規則的話,WordPress是不認識這個連結的,它以為有個目錄叫tokyodaigaku,裡面有篇文章叫page-2.html,結果會給出一個無情的404錯誤:

利用伺服器的重寫規則

如果是SAE的話,在config.yaml的第一行加入:

複製代碼 代碼如下:

- rewrite: if ( !is_dir() && path ~ "(.+?)/([^/]+)(/page-([0-9]+))+.html/?$") goto "index.php?name=$2&page=$4"

如果不是的話,可以利用WordPress內建的rewrite_rules:

登陸後台——設定——固定連結:

什麼也不用填,直接儲存更改即可。代碼會自動在資料庫中硬性加入一條規則:

複製代碼 代碼如下:

"(.+?)/([^/]+)(/page-([0-9]+))+.html/?$" => "index.php?name=$matches[2]&page=$matches[4]"

最終效果

無論是用http://www.***.com/program/tokyodaigaku.html/2/ 還是 http://www.***.com/program/tokyodaigaku/page-2.html,都可以訪問第二頁。

具體效果放在第二頁,順便測試一下分頁尾碼效果

好了,準系統已經實現了,小夥伴們是否明白了呢,如有問題,可以留言探討哦!

相關推薦:

解析WordPress中hook的使用

給WordPress中的留言加上樓層號

總結關於WordPress注意點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.