今天匿名在评论里插入图片的时候,突然发现我插的图片被吞了...尴尬了,原来这么久以来我的插入图片这个按钮功能是“不起作用”的...
然后百度了下,果然有结果了:“在 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="javascript:embedImage();">插入图片</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 中如何允许非管理员用户在评论中插入图片 - 龙笑天下
* 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 指定文章或页面允许评论昵称/内容带连接地址
第四种
/**
* 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);
注意:这个方法允许的标签全都得自己定义。所以我对该方法进行了改进如下,当然,如果想允许更多 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》。
还没有人赞赏,快来当第一个赞赏的人吧!
声明:本文为原创文章,版权归龙笑天下所有,欢迎分享本文,转载请保留出处!