如何将其他页面的url最后部分.php改为.html啊?_WordPress固定链接形式以.html结尾时,解决其他URL末尾丢失.html的情况...

在我们一些开发中,常常想让网站的UTL末尾以.html结尾,以此来让自己的网站显得更有吸引力。但实际上,我并不认为这是最好的,如果网站的内容非常出色,我相信使用什么形式的URL都不会影响网站的用户体验。好了,不管这些,我们来就题目而说。

当你的wordpress固定链接形式采用.html结束时(当然,你有的时候采用.htm或者采用.xxx),你会发现除了文章页面的URL是以.html结尾外,其他页面都不是,这会让你感到失望。本文就来帮你解决这个问题。我们开发一个插件来解决它。

首先,我们先让独立文章页的URL带上.html

add_action('init', 'permalink_end_width_html', -1);

function permalink_end_width_html() {

?? ?global $wp_rewrite;

?? ?if(!strpos($wp_rewrite->get_page_permastruct(),'.html')){

?? ??? ?$wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';

?? ?}

}

add_filter('user_trailingslashit', 'no_page_slash',66,2);

function no_page_slash($string, $type){

?? global $wp_rewrite;

?? ?if ($wp_rewrite->using_permalinks() && $wp_rewrite->use_trailing_slashes==true && $type == 'page'){

?? ??? ?return untrailingslashit($string);

? }else{

?? return $string;

? }

}

这段代码中有两个部分,第一部分用以修改页面的固定链接形式(permstructure),为每一个链接添加.html。这一步会让你的用户在访问带有.html的页面URL时,仍然可以访问到页面。

但如果仅仅这样的话,你会发现,前台HTML源代码中,所有页面的URL都是不带.html的,因此,你需要继续使用第二部分来让这些链接可用。

其次,让你的分类、标签、归档页的URL末尾也带上.html

add_filter('category_link', 'archives_link_end_with_html', 10, 2);

add_filter('tag_link', 'archives_link_end_with_html', 10, 2);

add_filter('day_link', 'archives_link_end_with_html', 10, 2);

add_filter('month_link', 'archives_link_end_with_html', 10, 2);

add_filter('year_link', 'archives_link_end_with_html', 10, 2);

function archives_link_end_with_html($link){

?? ?return rtrim($link, '/') . '.html';

}

是的,使用上面的短短的代码,就可以让你的分类、标签、归档(年月日)页URL采用.html的形式。关于作者、文章形式等,我们就不去挖掘了,毕竟这几个页面是最重要的。

但这段代码只是让你的前台页面中它们的链接有了变化,实际上,我们还没有写重写规则,这些新的URL还是不能访问的。重写我们和下面的合并到一起,最后来讲。

再次,让你的翻页也采用.html的形式

这一点在其他几乎所有的教程中都没有讲,即使你使用了某些方法,但如果你的页面开始翻页,就会发现URL变成了...html/page/123的样子,.html跑到了中间。实际上,我们有办法来解决这个问题。

function permalink_end_width_html_pagenum_change($pagenum_link){

?? ?$current_pagenum = get_query_var('paged');

?? ?$pagenum_link = str_replace('.html','',$pagenum_link);

?? ?if(is_home() && is_front_page()){

?? ??? ?$pagenum_link = str_replace('page/','page-',$pagenum_link);

?? ??? ?$pagenum_link = str_replace('page-'.$current_pagenum.'/','',$pagenum_link);

?? ?}else{

?? ??? ?$pagenum_link = str_replace('/page/','/page-',$pagenum_link);

?? ??? ?$pagenum_link = str_replace('/page-'.$current_pagenum,'',$pagenum_link);

?? ?}

?? ?return $pagenum_link.'.html';

}

function permalink_end_width_html_pagenum_change_filter(){

?? ?add_filter('get_pagenum_link','permalink_end_width_html_pagenum_change');

}

add_action('init','permalink_end_width_html_pagenum_change_filter');

因为大部分翻页功能都会使用get_pagenum_link函数来最终获取翻页的链接,因此,我们利用这个HOOK来修改了翻页按钮的链接。

需要注意的是:如果你不是使用get_pagenum_link函数来获取翻页链接,那么这段代码将失效,你需要自己研究(当然,这段代码给了你极大的参考价值)。

最后,将新的重写规则告诉wordpress,让这些新的链接都是可用的

虽然上面大部分可以帮助我们解决URL的显示形式,但还有一个问题是,即使这些链接是可以被访问到的,但你还得保证,访问到后它们还能正常工作,而不是返回404页面。所以,我们必须向wordpress增加重写规则。

add_filter('category_rewrite_rules', 'permalink_end_width_html_rewrite', 3);

add_filter('tag_rewrite_rules', 'permalink_end_width_html_rewrite', 3);

add_filter('date_rewrite_rules', 'permalink_end_width_html_rewrite', 3);

function permalink_end_width_html_rewrite($rules){

??? foreach ($rules as $key => $value) {

??????? $newrules[str_replace('/?', '.html', $key)] = $value;

??????? $newrules[str_replace('/page/?([0-9]{1,})/?', '/page-?([0-9]{1,})\.html', $key)] = $value;

??? }

??? return $newrules;

}

// 对首页的分页进行一个重写

add_filter( 'rewrite_rules_array','permalink_end_width_html_home_rewrite_rules' );

function permalink_end_width_html_home_rewrite_rules( $rules ){

?? ?$newrules = array();

?? ?$newrules['^page-([0-9]{1,})\.html$'] = 'index.php?paged=$matches[1]';

?? ?return $newrules + $rules;

}

好了,通过上面这些代码,我们要实现的效果就可以实现了。

为了防止你编程时头痛,我自己写好了插件,你可以下载测试:

然而还有一个问题,你可能仍然发现某些情况下它们会失效。请你自觉的向我反馈这些问题,让我可以将它改进,以让更多的朋友从中受惠。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值