《PHP實戰:WordPress分頁偽靜態加html后綴》要點:
本文介紹了PHP實戰:WordPress分頁偽靜態加html后綴,希望對您有用。如果有疑問,可以聯系我們。
PHP教程問題
PHP教程當文章有分頁的時候,WordPress生成的永久鏈接是page.html/2的形式,前面一段是文章的$link,后面的數字代表分頁$number.那么問題來了,挖掘……不對,從邏輯上講這到底是個html文件還是一個目錄呢?
PHP教程難看
PHP教程在.html這個靜態文件后面加上一個/和數字簡直令人摸不著頭腦,這還只是其次,重要的是,我發現搜索引擎根本不收錄這樣奇怪的鏈接,這個真是無法接受,我寫的東西首尾都很重要,不能因為分個頁就被忽視了.
PHP教程不收錄
PHP教程拿這篇文章來看,搜索文章第一頁的內容,谷歌收錄了:
PHP教程
PHP教程搜索文章第二頁和第三頁的內容,根本沒有收錄:
PHP教程
PHP教程解決方案
PHP教程于是我決定DIY WordPress的鏈接生成與解析規則.
PHP教程思路
PHP教程利用filter wp_link_pages_link 將分頁鏈接/123456重寫為page-[123456].html.
PHP教程利用WordPress或者服務器的RewriteRule將page-[123456].html還原為/123456
PHP教程添加鉤子redirect_canonical,防止WordPress從page-[123456].html到/123456的強行跳轉.
PHP教程生成分頁html后綴鏈接
PHP教程給WordPress主題加入:
PHP教程
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();
PHP教程這樣就得到了將類似http://www.domain.com/program/tokyodaigaku.html/2/ 的分頁鏈接轉化為形如 http://www.domain.com/program/tokyodaigaku/page-2.html 的鏈接.
PHP教程注意,我的偽靜態規則是/%category%/%postname%.html,如果你的規則不同,請自行修改代碼或者偽靜態規則.
PHP教程重寫URL規則
PHP教程如果不重寫規則的話,WordPress是不認識這個鏈接的,它以為有個目錄叫tokyodaigaku,里面有篇文章叫page-2.html,結果會給出一個無情的404錯誤:
PHP教程
PHP教程利用服務器的重寫規則
PHP教程如果是SAE的話,在config.yaml的第一行加入:
PHP教程如果不是的話,可以利用WordPress自帶的rewrite_rules:
PHP教程登陸后臺――設置――固定鏈接:
PHP教程
PHP教程什么也不用填,直接保存更改即可.代碼會自動在數據庫中硬性加入一條規則:
PHP教程最終效果
PHP教程無論是用http://www.domain.com/program/tokyodaigaku.html/2/ 還是 http://www.domain.com/program/tokyodaigaku/page-2.html,都可以訪問第二頁.
PHP教程具體效果放在第二頁,順便測試一下分頁后綴效果
PHP教程
PHP教程好了,基本功能已經實現了,小伙伴們是否明白了呢,如有問題,請留言
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6258.html