今天有人在群里问大发煎蛋的评论自动把图片地址转化为图片是怎么实现的,想起以前牧风好像写过一篇文章,于是找来测试了下,发现正则写的稍微有点问题,只能匹配纯URL,有其他字符就会失效了,于是重写了下正则,经过测试应该是比较完美的。顺便修改了下post_ID
的判断部分。
但是还是有一个缺陷,就是多张图片地址要分开,如果连在一起无法正确匹配多张图片。
实现方法
下面的代码直接放到functions.php
中即可
define('ALLOW_POSTS', ''); function fa_comment_image( $comment ) { $post_ID = $comment["comment_post_ID"]; $allow_posts = ALLOW_POSTS ? explode(',', ALLOW_POSTS) : array(); if(in_array($post_ID,$allow_posts) || empty($allow_posts) ){ global $allowedtags; $content = $comment["comment_content"]; $content = preg_replace('/(https?:\/\/\S+\.(?:jpg|png|jpeg|gif))+/','<img src="$0" alt="" />',$content); $allowedtags['img'] = array('src' => array (), 'alt' => array ()); $comment["comment_content"] = $content; } return $comment; } add_filter('preprocess_comment', 'fa_comment_image');
ALLOW_POSTS
为允许自动贴图的文章,多篇文章用,
隔开即可,如需所有文章则定义为空即可。
首先很感谢老大把这段代码分享出来!
之前也用这个代码做过一个无聊图页面,现在看煎蛋无聊图页面有几个改进。一个是,每个图上面有个查看原图连接,然后支持多图一起发,如果图片是gif,自动加一个gif-mask层,不是gif的话就不加。我按照上面的代码改进了一下,但出现几个问题。发多个gif的时候图片直接不显示(图片地址被重复),jpg的话没问题。但每个图片上的查看原图始终连接到第一张图。PHP不懂,只能盲写了一些,废话不说了,线把我的代码贴上,老大能否看看?
@karl87 代码好像被吞没了,囧。。。
@karl87 代码发到你邮箱了
@karl87
你应该先用
preg_match_all
匹配所有图片地址,然后再用str_replace
来逐个替换。@bigfa 写了两天,没有进步。网上的代码基本上照看了一遍,怪自己不会PHP了,暂时放弃了。感觉是在浪费时间