李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 其他
  3. 正文

WordPress评论框增加自定义表情

2021年3月14日 约 1,376 字5 分钟 216 0 5
本文最后更新于 2025年11月21日,距今已 304 天,其中的信息可能已经发生变化,请注意甄别。

这几天去邻居家的博客转了转,发大家基本上都有了评论框的表情,遂觉得自己有点儿落伍了。本博客并没有使用主题自带的评论框,而是使用的wpDiscuz这个插件,其实这个插件自带的是有评论框表情的扩展的,不过那个需要额外花钱,一年好几十美刀,舍不得,只好自己瞎捣鼓捣鼓了。

百度了一圈,发现OwO这个表情插件大家用的多一些,虽然是好几年前的代码了,但是依旧很好使,这里不得不为原作者点赞。

这里附上OwO的源码地址:https://github.com/DIYgod/OwO

使用

这个插件使用起来倒是很简单。

第一步

引用OwO.min.js及OwO.min.css文件,以及初始化代码。

示例如下:

<script type="text/javascript" src="https://www.lifengdi.com/wp-content/themes/kratos-3.2.4/assets/js/OWO.js?ver=3.2.8" id="owo-js"></script>
<script type="text/javascript" >
var OwO_icon = new OwO({
logo: 'OωO表情',
container: document.getElementsByClassName('OwO')[0],
target: document.getElementsByClassName('ql-editor')[0],
api: 'https://www.lifengdi.com/wp-content/themes/kratos-3.2.4/inc/OwO.json',
position: 'down',
width: '100%',
maxHeight: '250px'
});
var OwO_icon1 = new OwO({
logo: 'OωO表情',
container: document.getElementsByClassName('OwO')[1],
target: document.getElementsByClassName('ql-editor')[1],
api: 'https://www.lifengdi.com/wp-content/themes/kratos-3.2.4/inc/OwO.json',
position: 'down',
width: '100%',
maxHeight: '250px'
});
</script>

第二步

找到wpDiscuz这个插件的评论框的位置,也就是wpdiscuz/forms/wpdFormAttr/Form.php这个文件,找到文件中的renderTextEditorButtons这个函数,在最下方的div标签的外边插入<div class="OwO"></div>,

这两步弄完,不出意外的话,你的评论框应该存在一个OwO表情的按钮,可以正常添加表情。

第三步

接下来就是处理表情的展示问题了。

找到主题的文章页面,插入以下代码:

// 文章评论表情
function custom_smilies_src($img_src, $img, $siteurl)
{
    return ASSET_PATH . '/static/images/smilies/' . $img;
}
add_filter('smilies_src', 'custom_smilies_src', 1, 10);

function smilies_reset(){
    global $wpsmiliestrans,$wp_smiliessearch,$wp_version;
    if(!get_option('use_smilies')||$wp_version<4.2) return;
    $wpsmiliestrans = array(
     ':hehe:' => 'hehe.png',
     ':haha:' => 'haha.png',
    ':tushe:' => 'tushe.png',
        ':a:' => 'a.png',
       ':ku:' => 'ku.png',
       ':nu:' => 'nu.png',
   ':kaixin:' => 'kaixin.png',
      ':han:' => 'han.png',
      ':lei:' => 'lei.png',
  ':heixian:' => 'heixian.png',
    ':bishi:' => 'bishi.png',
':bugaoxing:' => 'bugaoxing.png',
 ':zhenbang:' => 'zhenbang.png',
     ':qian:' => 'qian.png',
    ':yiwen:' => 'yiwen.png',
  ':yinxian:' => 'yinxian.png',
       ':tu:' => 'tu.png',
       ':yi:' => 'yi.png',
    ':weiqv:' => 'weiqv.png',
   ':huaxin:' => 'huaxin.png',
       ':hu:' => 'hu.png',
  ':xiaoyan:' => 'xiaoyan.png',
     ':leng:' => 'leng.png',
':taikaixin:' => 'taikaixin.png',
     ':meng:' => 'meng.png',
    ':huaji:' => 'huaji.png',
   ':huaji2:' => 'huaji2.png',
   ':huaji3:' => 'huaji3.gif',
   ':huaji4:' => 'huaji4.png',
   ':huaji5:' => 'huaji5.gif',
   ':huaji6:' => 'huaji6.png',
   ':huaji7:' => 'huaji7.png',
   ':huaji8:' => 'huaji8.png',
   ':huaji9:' => 'huaji9.png',
  ':huaji10:' => 'huaji10.png',
  ':huaji11:' => 'huaji11.png',
  ':huaji12:' => 'huaji12.png',
  ':huaji13:' => 'huaji13.png',
  ':huaji14:' => 'huaji14.png',
  ':huaji15:' => 'huaji15.png',
  ':huaji16:' => 'huaji16.gif',
  ':huaji17:' => 'huaji17.png',
  ':huaji18:' => 'huaji18.png',
  ':huaji19:' => 'huaji19.png',
  ':huaji20:' => 'huaji20.gif',
  ':huaji21:' => 'huaji21.gif',
  ':huaji22:' => 'huaji22.png',
  ':huaji23:' => 'huaji23.png',
':mianqiang:' => 'mianqiang.png',
 ':kuanghan:' => 'kuanghan.png',
     ':guai:' => 'guai.png',
 ':shuijiao:' => 'shuijiao.png',
   ':jingku:' => 'jingku.png',
  ':shengqi:' => 'shengqi.png',
   ':jingya:' => 'jingya.png',
      ':pen:' => 'pen.png',
    ':aixin:' => 'aixin.png',
   ':xinsui:' => 'xinsui.png',
   ':meigui:' => 'meigui.png',
     ':liwu:' => 'liwu.png',
  ':caihong:' => 'caihong.png',
     ':xxyl:' => 'xxyl.png',
      ':sun:' => 'sun.png',
    ':money:' => 'money.png',
     ':bulb:' => 'bulb.png',
      ':cup:' => 'cup.png',
     ':cake:' => 'cake.png',
    ':music:' => 'music.png',
    ':haha2:' => 'haha2.png',
      ':win:' => 'win.png',
     ':good:' => 'good.png',
      ':bad:' => 'bad.png',
       ':ok:' => 'ok.png',
     ':stop:' => 'stop.png',
   ':hahaha:' => 'hahaha.png',
   ':despise:' => 'despise.png',
   ':knife:' => 'knife.png',
   ':pouting:' => 'pouting.png',
   ':shutup:' => 'shutup.png',
   ':unhappy:' => 'unhappy.png',
   ':discovertruth:' => 'discovertruth.png',
   ':shit:' => 'shit.png',
   ':distressed:' => 'distressed.png',
   ':shy:' => 'shy.png',
   ':speechless:' => 'speechless.png',
   ':confuse:' => 'confuse.png',
   ':frown:' => 'frown.png',
   ':proud:' => 'proud.png',
   ':cheer:' => 'cheer.png',
   ':meditation:' => 'meditation.png',
   ':diving:' => 'diving.png',   
   ':cryingface:' => 'cryingface.png',
   ':lurking:' => 'lurking.png',
   ':thumb:' => 'thumb.png',
   ':smile:' => 'smile.png',
   ':clap:' => 'clap.png',
   ':envious:' => 'envious.png',
   ':surrender:' => 'surrender.png',
   ':bigeye:' => 'bigeye.png',
   ':nose:' => 'nose.png',
   ':sweat:' => 'sweat.png',
   ':flower:' => 'flower.png',
   ':crying:' => 'crying.png',
   ':spit:' => 'spit.png',
   ':surprised:' => 'surprised.png',
   ':blood:' => 'blood.png',
   ':blood2:' => 'blood2.png',
   ':shy2:' => 'shy2.png',
   ':angry:' => 'angry.png',
   ':nomatter:' => 'nomatter.png',
   ':dead:' => 'dead.png',
   ':insidious:' => 'insidious.png',
   ':tongue:' => 'tongue.png',
    );
}
smilies_reset();

 

到这里差不多就结束了,不过发现一个问题,就是表情图片在前段展示的特标小,查看源码发现所有的表情上都有height: 1em; max-height: 1em这么一个样式,全局搜索wordpress源码,发现在wp-includes/formatting.php 找到了相关代码,删除之后一切正常了~,不过这样一旦升级wordpress就完犊子了……

百度了一下,发现有大神给出了解决办法,这里粘贴复制下:

/**
 * 修复WordPress4.2表情尺寸异常问题
 * 代码转自(张戈博客):http://zhangge.net/5035.html
 * */
remove_action( 'comment_text',      'convert_smilies',   20 );  //移除4.2 表情相关钩子
remove_action( 'the_content',           'convert_smilies'   );  //移除4.2 表情相关钩子
remove_action( 'the_excerpt',            'convert_smilies'  );  //移除4.2 表情相关钩子
add_action( 'comment_text',     'convert_smilies_diy',    20);  //自定义表情相关钩子
add_action( 'the_content',          'convert_smilies_diy'   );  //自定义表情相关钩子
add_action( 'the_excerpt',      'convert_smilies_diy'       );  //自定义表情相关钩子
//原函数 convert_smilies 位于wp-includes/formatting.php
function convert_smilies_diy( $text ) {
  global $wp_smiliessearch;
  $output = '';
  if ( get_option( 'use_smilies' ) && ! empty( $wp_smiliessearch ) ) {
    // HTML loop taken from texturize function, could possible be consolidated
    $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // capture the tags as well as in between
    $stop = count( $textarr );// loop stuff
    // Ignore proessing of specific tags
    $tags_to_ignore = 'code|pre|style|script|textarea';
    $ignore_block_element = '';
    for ( $i = 0; $i < $stop; $i++ ) {
      $content = $textarr[$i];
      // If we're in an ignore block, wait until we find its closing tag
      if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) )  {
        $ignore_block_element = $matches[1];
      }
      // If it's not a tag and not in ignore block
      if ( '' ==  $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) {
        $content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley_diy', $content );
      }
      // did we exit ignore block
      if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content )  {
        $ignore_block_element = '';
      }
      $output .= $content;
    }
  } else {
    // return default text.
    $output = $text;
  }
  return $output;
}
//原函数 translate_smiley 位于wp-includes/formatting.php
function translate_smiley_diy( $matches ) {
  global $wpsmiliestrans;
  if ( count( $matches ) == 0 )
    return '';
  $smiley = trim( reset( $matches ) );
  $img = $wpsmiliestrans[ $smiley ];
  $matches = array();
  $ext = preg_match( '/\.([^.]+)$/', $img, $matches ) ? strtolower( $matches[1] ) : false;
  $image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' );
  // Don't convert smilies that aren't images - they're probably emoji.
  if ( ! in_array( $ext, $image_exts ) ) {
    return $img;
  }
  //请注意!已将表情路径定义到主题目录下的 images/smilies 文件夹
  $src_url = apply_filters( 'smilies_src', get_bloginfo('template_directory').'/images/smilies/'.$img, $img, site_url() );
  return sprintf( '<img src="%s" alt="%s" class="wp-smiley" style="/*height: 1em; max-height: 1em;*/" />', esc_url( $src_url ), esc_attr( $smiley )         );
}

 

参考链接

1
  1. 1github.comgithub.com
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/others/2589

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

WordPress评论框增加自定义表情

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: 博客 表情
最后更新:2025年11月21日

岁月同一天 9 月 22 日

回望过去的今天,你在写什么

  • 3 年前 2023年9月22日
    《人生海海》读后感

    前段时间读完了麦家的《人生海海》,起初对人生海海这个词不太理解,记得第一次听到这个词,应该是在《欢喜就好》这首歌里,里面…

  • 4 年前 2022年9月22日
    OHCache使用

    OHCache介绍 缓存框架OHC基于Java语言实现,并以类库的形式供其他Java程序调用,是一种以单机模式运行的堆外…

相关文章
  • 如何通过个人博客赚钱?2019年10月21日
  • 这个域名注册整整十年了,十年时间,真快啊2026年2月26日
  • AI时代,个人技术博客的出路在哪里?2026年1月23日
  • 关于8月29号下午博客故障的一些记录2021年8月31日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • 李锋镝博主

    :hehe:

    WindowsWindowsChrome 89.0.4389.128Chrome 89.0.4389.128中国中国-北京
    2021年4月15日
    00 回复
  • CatyoLv 2

    :huaji7: 针不戳

    WindowsWindowsChrome 89.0.4389.82Chrome 89.0.4389.82中国中国-浙江-绍兴
    2021年3月15日
    00 回复
    • 李锋镝博主

      @Catyo :huaji20:

      WindowsWindowsChrome 88.0.4324.182Chrome 88.0.4324.182中国中国-北京
      2021年3月15日
      00 回复
  • 强仔Lv 2

    :huaji3: 很强

    AndroidAndroidChrome 83.0.4103.106Chrome 83.0.4103.106中国中国-河南-郑州
    2021年3月14日
    00 回复
    • 李锋镝博主

      @强仔 :huaji22: 哈哈~~都是粘贴复制~

      WindowsWindowsChrome 88.0.4324.182Chrome 88.0.4324.182中国中国-北京
      2021年3月15日
      00 回复
  • 庐山烟雨浙江潮,未至千般恨不消。
    到得还来别无事,庐山烟雨浙江潮。

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    让WordPress静态化之Rocket‑Nginx WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态 Kratos-plus v1.1.24版本更新说明 关于主题加载速度优化的一点儿小演进
    关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?
    重构 Controller 终极指南:从臃肿到优雅的 7 大黄金法则 + 实战技巧 MySQL数据库之存储过程与存储函数 Claude Haiku 4.5、Claude Sonnet 4.6、Claude Opus 4.7 区别以及各自的新特性 提示词工程终极指南:从入门到精通的全维度实战手册 关于主题加载速度优化的一点儿小演进 手把手教你在 KubeSphere 上构建自托管 AI 助手:基于 Open WebUI 实现企业级私有智能平台
    最近评论
    李锋镝 发布于 2 天前(09月20日) 静态博客我之前也用过,但是感觉不是很方便,后来就一直用的WordPress
    Sheep5 发布于 2 天前(09月20日) 我直接用静态博客,天然有速度优势。
    不凡 发布于 2 天前(09月20日) 主要是wordpress插件丰富,需要什么功能插件,插件市场应有尽有,typecho是性能更好、更轻...
    李锋镝 发布于 2 天前(09月20日) 忒极简了,而且这个布局我也搞不懂
    李锋镝 发布于 2 天前(09月20日) 哈哈哈~自定义的功能都是符合自己需求的
    标签聚合
    MQ K8s 架构 SQL IDEA SpringBoot JVM AI 数据库 ElasticSearch AI编程 分布式 Redis WordPress 多线程 JAVA Spring 日常 Claude MySQL
    友情链接
    • 韩情脉脉
    • 瓦匠个人小站
    • 林羽凡
    • 知向前端
    • 搬砖日记
    • 皮皮社
    • 若梦博客
    • 蜗牛工作室
    • sssr7844的博客
    • lijie blog
    • 韩小韩博客
    • 志文工作室
    • Honesty
    • Serendipity
    • 九仞之行
    • 老张博客
    • 临窗旋墨
    • 懋和道人
    • 彬红茶日记
    • 哥斯拉

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号