指穷于为薪,火传也,不知其尽也。—《养生主》

Daily English:Strike the iron while it is hot.

post内分页及标签修改

之前闲来无事(也不是无事,只是不想干活的借口 :-| ),做了一个专门放书的网站文抄公,然后四处搜罗txt格式的书往上面直接就是一扔,扔着是爽了,可是看的时候很痛苦,为啥内?因为post内分页的问题……

wordpress的post内分页的实现我想很多人都知道,就是在文章内简单地插入一个<!–nextpage–>注释即可,然后就会看到页面下方中出现了一个个可爱的数字链接,点一点就会跳到相应的页面去,不用担心由于不停地滚动屏幕造成键盘pagedown键或者鼠标滚轮的过劳死,不过,当文章非常之长,分页非常之多的时候,将会出现如下图所示的诡异场面:

一堆翻页

这80多个连接还是在我将每页的内容扩大之后的结果,如果按照原来的排版,将会出现100多个连接!那么接下来要做的事,就是让我们去找插件吧 :lol: 。嗯,于是,我遇到了pageBar V2。应该说这个插件做的事情很简单,就是干掉多余的链接,试用过后效果还是比较显著的,至少对于正常的阅读来说,不会再担心容易点错连接的问题,效果如下图:

减少了一堆超链接,看着清新多了

不过这个插件在使用的时候需要注意几点:

  1. 它自己号称能自动插入页面,可惜的是,它自动插入的是外部页面而不是post页,如果原来已经使用了诸如wp_pagenavi的插件的话,那还是取消自动插入吧,否则你会看到街面上出现两个超链接列表,有点无所适从(而且它所谓的去除原有超链接列表的功能应该是针对wordpress最原始的那个上一页下一页的超链接而已,对wp_pagenavi并不起作用,它所谓的去除只是设置了样式表为display:none而已。)

  2. 需要手动修改页面模板,将原有使用的代码如:

    Language:  PHP
    <? wp_link_pages();?>

    替换成:

    < ?php if (function_exists('multipagebar'))
             multipagebar(); ?>
    

    如果原来没有调用wp_link_page()的话,则可以直接插将上述代码放置在the_content('......');之后。

在解决完正常页面下显示的问题之后,试着看了一下wap下的显示效果,结果……又看到一屏幕的超链接……由于在手机上,这么多的超链接的视觉震撼效果更加强烈。

由于用的是wp-t-wap插件,不大可能去直接调用pagebar,在想了一下之后,还是直接修改wp-t-wap插件吧。下面是大致的修改步骤(需要说明的是,wp-t-wap的wap实现机制是将插件中的子目录wap完全复制到系统根目录中,所以修改的时候记得修改2份,以免由于有时候禁用/启用插件而导致问题的重复出现):

找到插件目录,一般是/站点地址/wp-content/plugins/wp-t-wap/,它下面会有一个子目录wap,我们要修改的内容就是其中的functions.php(wp-t-wap的实现其实就是实现一个简化版的wordpress,调用相对简单的函数而已)。找到其中的函数_wap_link_pages。正常情况下,需要修改部分的代码应该是长成这个样子:

Language:  PHP
$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 .= '<a href="' . _get_permalink() . '">';
    } else {
        $output .= '<a href="' . _get_permalink() . '&page=' . $i . '">';
    }
  }
  $output .= $j;
  if ( ($i != $page) || ((!$more) && ($page==1)) )
    $output .= '</a>';
}

这段代码干的活就是从1开始遍历输出所有的超链接,如果是当前页则没连接之类,一看就和wordpress默认的实现基本一致,在少数据量的情况下自然无碍,不过就不适应我的情况了。而我要做的事情很简单,留头留尾留中间,和三个点距离过远的全部掐掉,代码很简单,看看应该也会自行修改,就不废话了:

Language:  PHP
$output .= $before;
$flag = array(0,0);
for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {
$j = str_replace('%',"$i",$pagelink);
if (abs($page-$i)<=4||$i<=3||$i>=($numpages-2)){
  $output .= ' ';
 
  if ( ($i != $page) || ((!$more) && ($page==1)) ) {
    if ( 1 == $i ) {
      $output .= '<a href="' . _get_permalink() . '">';
    } else {
      $output .= '<a href="' . _get_permalink() . '&page=' . $i . '">';
    }
  }
  $output .= $j;
  if ( ($i != $page) || ((!$more) && ($page==1)) )
    $output .= '</a>';
}
else{
  if ($i<$page&&$flag[0]==0){
    $output.='&hellip;&hellip;';
    $flag[0]=1;
  }
  if ($i>$page&&$flag[1]==0){
    $output.='&hellip;&hellip;';
    $flag[1]=1;
  }
}

我在循环中判断一下当前变量$i的取值范围,如果变量在自己周围(abs($i-$page))的9步内(前后各4个,不包括当前页)或者在头的三个范围内或者尾的三个范围内,则输出超链接,否则输出省略号…(就是我上一篇日志中苦苦寻找的html实体字符编码),并做标记,免得给我输出上百个省略号。然后,没有然后了,然后就实现了想要的功能,大功告成(记得复制到根目录的wap/下~~),最终wap效果图如下:

wap下的导航超链接

分享家:Addthis中国

Comments on: "post内分页及标签修改" (3)

  1. 如果是ASP呢,类似这样的分页怎么处理

    [回复]

  2. @jolly: asp的话似乎网上有提供很多现成的分页类哦,刚才搜索了一下,他们自带的分页都还不错,不像wp自带的这么傻。

    [回复]

  3. 难怪会出现33万字的文章~

    [回复]

Leave a comment for: "post内分页及标签修改"

*

Tag Cloud