龙笑天龙笑天  2016-10-31 06:35 龙笑天下 隐藏边栏 |   71 条评论  1,237 
文章评分 49 次,平均分 4.9

WordPress 中如何允许非管理员用户在评论中插入图片 wordpress

今天匿名在评论里插入图片的时候,突然发现我插的图片被吞了...尴尬了,原来这么久以来我的插入图片这个按钮功能是“不起作用”的...

然后百度了下,果然有结果了:“在 WordPress 中,默认情况下非管理员用户的评论中是不能插入图片的,这是权限设置问题。非管理员权限用户使用该标签会被过滤,因为 img 不在 allow tag 列表里。”

以下就介绍几种使非管理员用户也能在评论中插入图片的方法,请大家自行取舍~

第一种:修改 wordpress 程序代码

打开 wordpress 程序 wp-includes/kses.php 文件,搜索关键词: $allowedtags,大约 419 行,增加对 img 标签的支持,如下:

	$allowedtags = array(
		'a' => array(
			'href' => true,
			'title' => true,
		),
		'img' => array (
		'src' => array (), 'alt' => array ()
		),
		'abbr' => array(
			'title' => true,
		),

来自《用最简洁的代码让 wordpress 的评论框添加“插入图片”按钮

注意:这个方法有个弊端,每次升级 wordpress,都必须进行再次的修改!期待高手改进此方法!(已于 2018058 自行解决了,请直接看下面方法 5 的改进版!)

第二种:采用标签替换法

使用[img]图片 src 地址[/img]来添加评论图片~ 来自《WordPress 增加评论表情和评论插入图片

首先,在 functions.php 中加入下面的代码:

/**
* WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
* https://www.ilxtx.com/comment-embed-images.html
*/
function lxtx_embed_images($content) {
    // $content = preg_replace('/\[img=?\]*(.*?)(\[\/img)?\]/e', '"<img src=\"$1\" alt=\"" . basename("$1") . "\" />"', $content);
    $content = preg_replace_callback("/\[img=?\]*(.*?)(\[\/img)?\]/", function($r){ return '<img src="'.$r[1].'" alt="'.basename("$r[1]").'" />'; }, $content);
    return $content;
}
add_filter('comment_text', 'lxtx_embed_images');

然后,使用[img]图片 src 地址[/img]来添加图片~

当然,为了使用方便贴这个[img]标签,也可以给评论框那加一个按钮,具体方法如下。

先加入下面的这个 js 代码:

function embedImage() {
var URL = prompt('请输入图片 URL 地址:', 'http://');
if (URL) {
document.getElementById('comment').
value = document.getElementById('comment').value + '[img]' + URL + '[/img]';
}
}

再打开主题评论框所在的文件(如:comment.php 等),在适当的位置加入一个“插入图片”按钮:

<a href="https://www.ilxtx.com/redirect/acc54SB4CyCRN9aqw9T8koU86P6yHqCuaRwS6WNYQSHnkqjza8kYCzayH4BnhPBz6YCbUyHzhbDPEWaqDojRh8wWhPEusPBz69CnjYNyjbU9H9Dq68CqEok8E">插入图片</a>

第三种:将评论图片地址自动转化为图片

如同煎蛋网一样,将评论的图片地址自动转化为图片。实现方法有 2 种。

① 所有评论图片地址自动转化为图片

/**
 * WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
 * https://www.ilxtx.com/comment-embed-images.html
 */
add_action('comment_text', 'comments_embed_img', 2);
function comments_embed_img($comment) {
        $size = auto;
        $comment = preg_replace(array('#(http://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#','#(https://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#'),'<img src="$1" alt="" width="'.$size.'" height="" />', $comment);
        return $comment;
}

摘自《WordPress 评论中嵌入图片 | 知更鸟

此方法可以拓展至其它用途,比如:

WordPress 如何实现文章图片自动替换为指定图片-BG
WordPress 如何实现文章图片自动替换为指定图片

WordPress 如何实现文章图片自动替换为指定图片

很多博友的谷歌广告 Google AdSense 申请不通过,提示“网站不符合合作规范”,而大 Google 却不指出哪些地方不符合规范,这样对于我们广大的站长盆友来说就很蛋疼了,一头雾水,但也只能...

② 指定特定文章中或所有文章中的评论图片地址自动转化为图片

/**
 * WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
 * https://www.ilxtx.com/comment-embed-images.html
 */
define('ALLOW_POSTS', '');
function lxtx_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', 'lxtx_fa_comment_image');

摘自《煎蛋评论图片地址自动转化为图片

注:ALLOW_POSTS 里定义的是允许自动贴图的文章或页面的 post_ID ,多篇文章或页面用 , 隔开即可,如需所有文章和页面起效则定义为空即可。

添加上述代码后,在发表评论时直接粘贴图片链接地址即可。PS:受此方法启发,写下下面的文章:

如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址-BG
如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址

如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址

今天博客 112 兄提出了一个我认为有点奇怪的需求,也就是本文标题这个啦~~ 下班后立马折腾了下,结果死活不成功... 我是用 is_single() 和 is_page() 来判断的。 然后,...

第四种

/**
 * WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
 * https://www.ilxtx.com/comment-embed-images.html
 */
function lxtx_allowedtags_img() {
	global $allowedtags;
	$allowedtags['img'] = array('class'=>true,'src'=>true);
        // $allowedtags['pre'] = array('class'=>array());
}
add_action('comment_post', 'lxtx_allowedtags_img');

参考自:《WordPress 技巧:为评论模块增加更多 HTML 标签支持

但不知为啥,这种方法在本站,不起作用...

第五种

/**
* WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
* https://www.ilxtx.com/comment-embed-images.html
*/
function my_allowed_edittag() {
    define('CUSTOM_TAGS', true);
    global $allowedposttags, $allowedtags;
    $allowedposttags = array(
        'strong' => array(),
        'em' => array(),
        'ol' => array(),
        'li' => array(),
        'u' => array(),
        'ul' => array(),
        'blockquote' => array(),
        'code' => array(),
        'pre' => array(
            'style' => true,
            'class' => true,
        ),
        'a' => array(
        'href' => array (),
        'title' => array ()),
        'img' => array(
        'src' => array ()),
    );

    $allowedtags = array(
        'strong' => array(),
        'em' => array(),
        'ol' => array(),
        'li' => array(),
        'u' => array(),
        'ul' => array(),
        'blockquote' => array(),
        'code' => array(),
        'pre' => array(),
        'a' => array(
        'href' => array (),
        'title' => array ()),
        'img' => array(
        'src' => array ()),
    );
}
add_action('init', 'my_allowed_edittag', 10);

摘自《wordpress 过滤发表文章标签处理

注意:这个方法允许的标签全都得自己定义。所以我对该方法进行了改进如下,当然,如果想允许更多 html 标签和属性,就请在下面代码中自行添加了:

/**
* WordPress 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
* https://www.ilxtx.com/comment-embed-images.html
*/
function lxtx_allowed_html_tags() {
    global $allowedtags;
    $allowedtags['img'] = array(
        'src' => true,
        'alt' => true,
        'class' => true
    );
}
add_action('init', 'lxtx_allowed_html_tags', 10);

最后,大家也可以试试这个插件,《WordPress 给评论添加图片上传功能的插件:Comment Images》。

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

龙笑天
龙笑天 关注:32    粉丝:36 最后编辑于:2019-03-12
互助分享,互联网本该如此!

发表评论

表情 贴图 链接 私密 格式 签到
最赞评论
  1. 龙笑天
    龙笑天 永久会员 博主 来自天朝的朋友 火狐浏览器 Windows 7

    插个图片试试~ [得意]
    韩雪

  2. boke112导航
    boke112导航 评论达人 LV.3 来自天朝的朋友 谷歌浏览器 45.0.2454.101 Windows XP 广西南宁市 电信

    我的原先倒是有贴图上传功能,后来取消了,不想给用户游客上传图片到评论内容。

  3. Koolight
    Koolight 评论达人 LV.3 来自天朝的朋友 火狐浏览器 48.0 Windows 7 安徽省合肥市 联通

    这个功能我还是不添加了,哈哈!

  1. 看看什么效果 来自天朝的朋友 谷歌浏览器 63.0.3239.132 Windows 10 广东省河源市 联通

    https://www.ilxtx.com/wp-content/uploads/2019/04/25201C1-623b8a04gy1fvign5p27mj20go0m8wfj.jpg 看看先效果怎么样

    25楼 2019-04-16 18:21
    0 0 回复
  2. 张鑫
    张鑫 来自天朝的朋友 谷歌浏览器 56.0.2924.90 Windows 7 江苏省南京市 联通

    php7 中,preg_replace()不再支持"\e" (PREG_REPLACE_EVAL),需要使用 preg_replace_callback()来代替。请问怎么改

    24楼 2019-03-12 15:51
    0 0 回复
  3. 小南
    小南 来自天朝的朋友 谷歌浏览器 65.0.3325.181 Windows 10 广东省河源市 联通

    博主你这个上传图片的插件是什么?怎么上传的图片地址是到新浪图床的?
    Wall

    23楼 2018-03-26 11:01
    0 1 回复
  4. 银色月航
    银色月航 评论达人 LV.3 来自天朝的朋友 Chrome for iOS 63.0.3239.73 iPhone iPhone OS 10_0_2 like Mac OS X) AppleWebKit 安徽省滁州市 电信

    新年快乐,月航祝博主博客流量蹭蹭上涨,财源滚滚而来。

    22楼 2018-02-18 05:30
    0 0 回复
  5. 西枫里博客
    西枫里博客 评论达人 LV.3 来自天朝的朋友 搜狗浏览器 2.X Windows 7 上海市 联通

    西枫里给您拜年了,祝您春节快乐,万事如意,狗年旺旺,博客访问量如芝麻开花般节节高!

    21楼 2018-02-16 00:01
    0 0 回复
  6. 狂放
    狂放 评论达人 LV.1 来自天朝的朋友 火狐浏览器 58.0 Linux 江西省吉安市 移动

    [滑稽] 试试

    20楼 2018-02-15 22:39
    0 0 回复
  7. 西枫里博客
    西枫里博客 评论达人 LV.3 来自天朝的朋友 搜狗浏览器 2.X Windows 7 上海市 联通

    还有这功能?我去插个小黄图看看~

    19楼 2018-02-10 18:37
    0 0 回复
扫一扫二维码分享