巧妙美化静态化文章分页链接结构
前天和大家分享的“如何实现Wordpress文章分页”反响很好,但现在很多WPer都静态化了自己的的Blog,Wopus中文平台也一样,采用了“%postname%.html”这样的链接形式,分页后就变成了“postname.html/2”的形式,相当不美观,我们需要“postname-2.html”这样的形式,来,动两个小手术:
- 修改wp-includes/rewrite.php 文件
- wp-includes/post-template.php 文件
找到
在这行代码之前添加以下代码:
if (strpos($match, ‘.html’) !== false && strpos($query, ‘&page=’) !== false) {
$match = str_replace(‘(/[0-9]+)?/?$’, ‘$’, $match);
$rewrite = array_merge($rewrite, array(str_replace(‘([^/]+).html’, ‘([^/]+)-([0-9]+).html’, $match) => $query));
}
找到wp_link_pages函数,用以下代码替代之:
< ?php
/*
修改页面链接
*/
function alter_page_link($link, $pagenum){
return str_replace(".html", "-$pagenum.html", $link);
}
/*
包含在 / *=================* / 之间的代码作过修改
*/
function wp_link_pages($args = '') {
$defaults = array(
'before' => ‘
‘ . __(‘Pages:’), ‘after’ => ‘
‘,
‘next_or_number’ => ‘number’, ‘nextpagelink’ => __(‘Next page’),
‘previouspagelink’ => __(‘Previous page’), ‘pagelink’ => ‘%’,
‘more_file’ => ”, ‘echo’ => 1
);
$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
global $post, $id, $page, $numpages, $multipage, $more, $pagenow;
if ( $more_file != ” )
$file = $more_file;
else
$file = $pagenow;
$output = ”;
/*=================*/
/* 优化一下,太多重复调用了-_-! */
$permalink_structure = get_option(‘permalink_structure’);
$not_public_post = in_array($post->post_status, array(‘draft’, ‘pending’));
$permalink = get_permalink();
/* 判断永久链接格式是否支持静态化 */
$using_static_permalink = strpos($permalink, ‘.html’) !== false ? true : false;
/*=================*/
if ( $multipage ) {
if ( ‘number’ == $next_or_number ) {
$output .= $before;
for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {
$j = str_replace('%',"$i",$pagelink);
$output .= ' ';
if ( ($i != $page) || ((!$more) && ($page==1)) ) {
if ( 1 == $i ) {
$output .= '‘;
} else {
/*=================*/
if ( ” == $permalink_structure || $not_public_post ) {
$output .= ‘‘;
} else {
if (!$using_static_permalink) {
$output .= ‘‘;
} else {
$output .= ‘‘;
}
}
/*=================*/
}
}
$output .= $j;
if ( ($i != $page) || ((!$more) && ($page==1)) )
$output .= ‘‘;
}
$output .= $after;
} else {
if ( $more ) {
$output .= $before;
$i = $page – 1;
if ( $i && $more ) {
if ( 1 == $i ) {
$output .= ‘‘ . $previouspagelink . ‘‘;
} else {
/*=================*/
if ( ” == $permalink_structure || $not_public_post ) {
$output .= ‘‘ . $previouspagelink . ‘‘;
} else {
if (!$using_static_permalink) {
$output .= ‘‘ . $previouspagelink . ‘‘;
} else {
$output .= ‘‘ . $previouspagelink . ‘‘;
}
}
/*=================*/
}
}
$i = $page + 1;
if ( $i < = $numpages && $more ) {
if ( 1 == $i ) {
$output .= '‘ . $nextpagelink . ”;
} else {
/*=================*/
if ( ” == $permalink_structure || $not_public_post ) {
$output .= ‘‘ . $nextpagelink . ‘‘;
} else {
if (!$using_static_permalink) {
$output .= ‘‘ . $nextpagelink . ‘‘;
} else {
$output .= ‘‘ . $nextpagelink . ‘‘;
}
}
/*=================*/
}
}
$output .= $after;
}
}
}
if ( $echo )
echo $output;
return $output;
}
?>
以上步骤在Wordpress2.6下测试通过,代码来自Voidman
注意:
1、当你修改完成后,可能需要到后台设置里重新修改一次“永久链接形式”,无需改动设置,只需点一下“更新”。否则会出现404错误。
2、若没有静态化、伪静态化过Wordpress,也就是没有采用”%postname%.html”这样的链接形式,请不要这样修改,否则会出现“404”错误。
就直接”%postname%.html”就是所谓静态化么,我怎么感觉要生成HTML才是静态化吖..
很有用,我要试一下。
永久链接不敢改啊!
@NetPuter:这个是伪静态
有了这个分页就更完美了
这个真好。谢谢博主分享
Parse error: syntax error, unexpected ‘<‘ in /home/purpure/public_html/jeans/wp-includes/post-template.php on line 160
按照修改,出现错误!
第160行,刚好是< ?php 代码的开始,请问是怎么回事?谢谢!
@健康 请使用Ultraedit等文本编辑器,保存时请选择utf-8无dom模式
谢谢!我是用windows自带的文本编辑器,难怪出错,我再试试!
使用Ultraedit编辑:先把一大段wp_link_pages函数删掉,然后在删掉的位置粘贴你给的代码,再把前面的序号删掉,然后另存为时选择utf-8无dom模式保存,最后上传文件。
可惜还是出错,错误和之前一模一样!不知怎么搞的?
求助!
@健康 你的网站地址是?
你好,网址是:www.jeansky.cn
@NetPuter @NetPuter @NetPuter @NetPuter
这样的永久连接 对SEO有所帮助
我用这个代码(第二部分的长代码)也有问题啊。老师出错。。
谁能给解决下啊。
为什么我的标题是Forex Market Review 05/08/2009 这种形式的就出现问题呢Not Found, Error 404
The page you are looking for no longer exists.