清源绿里

WP中文工具箱更新(一)

WordPress 诞生于英语环境,因此由于计算机对语言支持的区别,它对中文的支持在细节上不尽人意。我们常常借助桑椹的中文工具箱来解决这个问题。但即便最近的版本也距今整整两年了,需要对它进行一些升级。

我们设计主题时,常常喜欢在侧边栏放置最新评论的模块,中文工具箱的 get_recent_comments 函数能够胜任这个工作。但在某些特定的场合,例如出现包含超链接的评论,尤其 get_recent_comments 中 $cut 的数值完全将超链接长度包含进去时,我们的网页将可能会出现畸形。因为具有不少字符的超链接被认为是一个单词,即使长度超过我们在 css 定义的容器宽度,系统也不会自动换行,造成超链接撑破框架的难看模样。

我的解决办法是,设置一个判断参数,假若回复中含有某个字段,则调整 $cut 来实现输出评论内容长度的控制。具体如下:

打开 mulberrykit.php,将如下代码替换 get_recent_comments 函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function get_recent_comments($no_comments = 5, $before = '<li> ', $after = '</li>', $show_pass_post = false, $cut=0, $string_filter = 'http') {

  global $wpdb;
  $request = "SELECT ID, comment_ID, comment_content, comment_author FROM $wpdb->posts, $wpdb->comments WHERE $wpdb->posts.ID=$wpdb->comments.comment_post_ID AND post_status = 'publish'";

  if(!$show_pass_post) { $request .= "AND post_password ='' "; }

  $request .= "AND comment_approved = '1' ORDER BY $wpdb->comments.comment_date DESC LIMIT $no_comments";
  $comments = $wpdb->get_results($request);
  $output = '';
  foreach ($comments as $comment) {
    $comment_author = stripslashes($comment->comment_author);
    $comment_content = strip_tags($comment->comment_content);
    $comment_content = stripslashes($comment_content);
    if(strstr($comment_content,$string_filter))
    {
      $comment_excerpt =substr($comment_content,0,20);
    }    
    else
    {
      $comment_excerpt =substr($comment_content,0,$cut);
    }
    $comment_excerpt = utf8_trim($comment_excerpt);
    $permalink = get_permalink($comment->ID)."#comment-".$comment->comment_ID;
    $output .= $before . '<a href="' . $permalink . '" title="View the entire comment by ' . $comment_author . '">' . $comment_author . '</a>: ' . $comment_excerpt . '...' . $after;
  }
  echo $output;
}

$string_filter 默认值为 http。也就是当评论中含有 http 字样时,会执行

1
$comment_excerpt =substr($comment_content,0,20);

这个语句,实现只显示20个字节的评论内容。当然,如果评论不包含 http,则按照正常 $cut 输出内容长度。

你可以修改 “20” 以达到理想的状态。

如此方法略微简陋,但至少解决了问题。

文章评论

  1. 很不错哦 嘿嘿 谢谢啊

Leave a Comment