今天博客112兄提出了一个我认为有点奇怪的需求,也就是:整站的所有文章和页面的评论昵称或评论内容都不允许带有链接地址,除了指定的文章或页面外。下班后立马折腾了下,结果死活不成功… 我是用 is_single() 和 is_page() 来判断的。然后,仔细想了下,可能是因为钩子是直接作用于preprocess_comment,所以上面的判断并不能很好的起作用!
偶然间想起了我这篇《WordPress中如何允许非管理员用户在评论中插入图片》里的第三种方法,然后立马就尝试了下并成功了~
实现方法很简单,只需要将以下代码添加到主题functions.php文件中最后一个?>的前面即可,具体代码如下:
- /**
- * 如何实现WordPress指定文章或页面允许评论昵称/内容带连接地址 – 龙笑天下
- * http://www.ilxtx.com/allow-comment-link-in-some-pages.html
- */
- define(‘ALLOW_PAGES’, ‘Id1,Id2’);
- function lxtx_allow_comment_link( $comment ) {
- $post_ID = $comment[“comment_post_ID”];
- $allow_posts = ALLOW_PAGES ? explode(‘,’, ALLOW_PAGES) : array();
- if(!in_array($post_ID,$allow_posts)){
- $links = ‘/http:\/\/|https:\/\/|www\.|\.com/u’;
- if (preg_match($links, $comment[‘comment_author’]) || preg_match($links, $comment[‘comment_content’])) {
- err(__(‘别啊,昵称和评论里面有链接会怀孕的哟!!’));
- }
- }
- return $comment;
- }
- add_filter(‘preprocess_comment’, ‘lxtx_allow_comment_link’);
例如只允许ID为6和8的文章评论昵称或内容可以带链接地址,那么只需要将:
- define(‘ALLOW_PAGES’, ‘Id1,Id2’);
改为
- define(‘ALLOW_PAGES’, ‘6,8’);
即可。