纯代码完美实现WordPress内容回复可见 10月24日
前两天找到了旧博的备份数据,想着把旧文整理上来也好丰富下久不更新的博客。
整理的第一篇是智商、财商的测试类文章——《【转】智商财商大测试》,前面是题目,后面是答案。一般网页上这类的都会做分页处理,答案会放在题目的下一页,但是在一篇博文中去做分页或是另开一篇博文公布答案感觉都不合适。所以要是能像论坛那样可设置回复可见,不仅能增强与博友的互动,还能提高博客的访问量,多棒!
网上找了一圈,有用各种各样插件达成的,其中提到最多的是“Easy2Hide”,虽然它代码也蛮短的,但是“插件”二字总让我嫌弃,还是找纯代码的才能抚慰我轻微的强迫症。
搜索不负强迫人,总算找到一段完美的代码可以实现这个功能,具体样式请见已用该效果的博文——《【转】智商财商大测试》,我在这里介绍该代码分别对于一般主题和Mossight主题的添加方法。
对于一般主题,只要把这段代码添加到function.php中即可,详细代码如下:
function reply_to_read($atts, $content=null) { extract(shortcode_atts(array("notice" => ' 温馨提示: 此处内容需要评论本文后才能查看 '), $atts)); $email = null; $user_ID = (int) wp_get_current_user()->ID; if ($user_ID > 0) { $email = get_userdata($user_ID)->user_email; //对博主直接显示内容 $admin_email = "on@sunny.lu"; //博主Email if ($email == $admin_email) { return $content; } } else if (isset($_COOKIE['comment_author_email_' . COOKIEHASH])) { $email = str_replace('%40', '@', $_COOKIE['comment_author_email_' . COOKIEHASH]); } else { return $notice; } if (empty($email)) { return $notice; } global $wpdb; $post_id = get_the_ID(); $query = "SELECT `comment_ID` FROM {$wpdb->comments} WHERE `comment_post_ID`={$post_id} and `comment_approved`='1' and `comment_author_email`='{$email}' LIMIT 1"; if ($wpdb->get_results($query)) { return do_shortcode($content); } else { return $notice; } } add_shortcode('reply', 'reply_to_read');
Mossight主题
Mossight主题本身就自带丰富的短代码,我们无需修改function.php,只要把这个“回复可见”添加进短代码库,在使用后台编辑器写文章时就可以很方便地调用了。(话说Mossight主题里有个下拉菜单的短代码可以暂时把想隐藏的内容藏起来,但是既点既现让懒博友又方便了,所以还是回复可见比较好)。
短代码库:wp-content\themes\Mossight\functions\shortcode.php
找到代码
add_shortcode('toggle','post_toggle');
另起一行插入代码:
//shortcode - self //reply_to_read function reply_to_read($atts, $content=null) { extract(shortcode_atts(array("notice" => ' <blockquote> <p style="color: #993300;"><strong>温馨提示:</strong></p> <p>此处内容需要评论本文后才能查看</p> </blockquote> '), $atts)); $email = null; $user_ID = (int) wp_get_current_user()->ID; if ($user_ID > 0) { $email = get_userdata($user_ID)->user_email; //对博主直接显示内容 $admin_email = "on@sunny.lu"; //博主Email if ($email == $admin_email) { return $content; } } else if (isset($_COOKIE['comment_author_email_' . COOKIEHASH])) { $email = str_replace('%40', '@', $_COOKIE['comment_author_email_' . COOKIEHASH]); } else { return $notice; } if (empty($email)) { return $notice; } global $wpdb; $post_id = get_the_ID(); $query = "SELECT `comment_ID` FROM {$wpdb->comments} WHERE `comment_post_ID`={$post_id} and `comment_approved`='1' and `comment_author_email`='{$email}' LIMIT 1"; if ($wpdb->get_results($query)) { return do_shortcode($content); } else { return $notice; } } add_shortcode('reply', 'reply_to_read');
然后再找到最后一个QTags.addButton项
QTags.addButton( 'm31', '下载按钮', '【butdown href="链接"】标题【/butdown】');//这用【 】防止代码运行,使用时请用[ ]替换
在其后面新增一项:
QTags.addButton( 'm32', '回复可见', '【reply】这里输入内容【/reply】');//这用【 】防止代码运行,使用时请用[ ]替换
就可以了。
这段代码的显示样式是可以设定的,只要用Html标签和样式把“温馨提示: 此处内容需要评论本文后才能查看”美化即可,比如在Mossight主题里的,我使用了blockquote标签、p标签和css,博友们可以根据自己的需求更改。
使用方法:
一般主题:在后台编辑文章时使用“【reply】【/reply】”把要隐藏的内容包起来即可(这用【 】防止代码运行,使用时请用[ ]替换)
Mossight主题:修改好shortcode.php后,进后台编辑器直接点“回复可见”按钮插入“回复可见”这个功能虽有优点,但也是有缺点的
优点:增强与博友的互动,提高博客的访问量
缺点:回复可见不是实时的,内容要等评论审核通过后才可见
- 本篇文章没有Trackback
学习了,谢谢站长分享,互访哦!
@仲花得花: 欢迎围观
技术博啊,哈哈
@毕扬: 嗯 算是做个笔记吧 顺便也跟大家分享下 唉~ 争取以后多折腾 多写点博文出来。。。
这个可以有。和论坛似的。
@wmtimes: 谢谢兄弟围观
不知道对缓存兼容不兼容
@不给力的面条:兄弟 这没问题的 我这VPS有设置缓存 而且网站还使用了免费CDN 都表现正常
好像蛮适合我的这个。
博主我不是技术控,不会用。你的题目很有意思,很想知道答案
@liangyishiji: 不好意思 现在才回复你 这也是这个功能的缺点 要评论通过审核后 你才能看。。。
嘿嘿,收藏了。到时候用上。
@大图吧 贴吧: 谢谢兄弟围观 :)
回复可见体验很不好啊,我的DISCUZ都不用这个设置了
感谢
在博主这学到了挺多东西的,谢谢博主。哈哈