不去在乎结果,热情地付出过,就好了.

让wordpress侧边栏显示详细最新评论

为了加强互动行,考虑在侧边栏增加能显示最新评论的栏目,

途中还遇到一点小问题.

首先,在wordpress的默认侧栏小工具里是有显示评论的,

不过只能显示人名和评论的文章,

例如:温暖色调 发表在《Message Board》

由于硬件限制,可用内存较小,不考虑再增加插件实现功能,

在网上有可以修改wp-includes/default-widgets.php(WP小工具文件)的教程,

不过还要下载软件来修改另一个文件,暂时不考虑该方法.

由于已经装了PHP解析插件(参见:在WordPress文章,页面及小工具中加入并执行PHP代码),
可以直接在WP中写入PHP,

计划在小工具的根本工具中直接写入PHP实现评论显示,

在网上搜索得到代码

<?php
$limit = '10'; //设置评论显示数量
$admin_email = "'" . get_bloginfo ('admin_email') . "'"; //获取管理员邮箱,以便排除管理员的评论
$rccdb = $wpdb->get_results("
SELECT ID, post_title, comment_ID, comment_author, comment_author_email, comment_content
FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts
ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID)
WHERE comment_approved = '1'
AND comment_type = ''
AND post_password = ''
AND comment_author_email != $admin_email
ORDER BY comment_date_gmt
DESC LIMIT $limit
");//数据库查询获得想要的结果
foreach ($rccdb as $row) {
$rcc .= "<li>". "<h6>".get_avatar($row,$size='32')."</h6>" . "<a href='"
. get_permalink($row->ID) . "#comment-" . $row->comment_ID
. "' title='评论于 " . $row->post_title . "'>".$row->comment_author ."</a>". " : <br />" . cut_str($row->comment_content,30). "</li>";
}//遍历查询到结果,获得想要的值,其中插入一些HTML元素,以便定义CSS样式
$rcc = convert_smilies($rcc);//允许评论内容中显示表情
echo $rcc;//输出结果
?>

把代码贴入,立马得到错误Fatal error: Call to a member function get_results() on a non-object in…

由于对PHP不是很懂,遂从后往前删代码,最后定为到变量$wpdb上,

在代码最前加上global $wpdb;将之变为全局变量即可,

然后新的错误出现了:Fatal error: Call to undefined function cut_str() in…

显然cut_str()不存在,

只好再找一个了,搜索cut_str() php即能得到很多结果,给出一例:

function cut_str($sourcestr,$cutlength){
$returnstr="";
$i=0;
$n=0;
$str_length=strlen($sourcestr);//字符串的字节数
while (($n<$cutlength) and ($i<=$str_length)){
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
if ($ascnum>=224) //如果ASCII位高与224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+3; //实际Byte计为3
$n++; //字串长度计1  19.
}
elseif($ascnum>=192) //如果ASCII位高与192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+2; //实际Byte计为2  24.$n++; //字串长度计1
}
elseif($ascnum>=65 && $ascnum<=90) //如果是大写字母,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数仍计1个
$n++; //但考虑整体美观,大写字母计成一个高位字符
}
else //其他情况下,包括小写字母和半角标点符号,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数计1个
$n=$n+0.5; //小写字母和半角标点等与半个高位字符宽…
}
}
if ($str_length>$cutlength)
{
$returnstr = $returnstr;//超过长度时在尾处加上省略号
}
return $returnstr;
}

将之加入所用主题的function.php,

再次刷新,评论显示,只需调整样式即可.

由于加入了评论表情,而字符到表情的转换在cut_str()之后,

如果表情字符刚好在所取字符转长度位置,就会出现问题,

导致显示表情原字符被截取,不能在转换为表情,

算是一个小小缺憾.

打赏

9 comments

Warm Color进行回复 Cancel reply

14 − 10 =

不去在乎结果,热情地付出过,就好了.
某一天,你所坚持的,和承担过的一切,会有回应。它们并非失去踪迹,只是需要时间抵达。这和星光落入眼睛里,是一样的道理。

近期文章

近期评论