提醒:本文最后更新于 3624 天前,文中所描述的信息可能已发生改变,请仔细核实。
早上上班前,按了更新到WordPress 4.2就去上班了。
到公司看到网站能打开就没理它(太忙了)。
后来博友 @World 提醒我说,博客的表情木有了。
当时在外面,手机看了下,确实是,想想只能是更新的原因,特别是记得看到更新有新版支持emoji表情的Changelog。诶,没想到更新没问题,却出了这种小问题。
想了下,找了大发,大发最后还是帮我试了下,中间互相探讨,给出了解决方案(由大发),传送门。
其实,去掉emoji感觉比较好,为了支持emoji还要加载很多东西,浪费性能完全。。对于国内小水管一点都不友好。所以即便不影响到我现有的表情,我也会把它去掉。话说其实我挺喜欢emoji表情的~
禁用Emoji表情的代码如下(直接放进functions.php即可,感谢Disable Emoji插件的作者):
/** * Disable the emoji's */ function disable_emojis() { remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' ); } add_action( 'init', 'disable_emojis' ); /** * Filter function used to remove the tinymce emoji plugin. * * @param array $plugins * @return array Difference betwen the two arrays */ function disable_emojis_tinymce( $plugins ) { return array_diff( $plugins, array( 'wpemoji' ) ); } function smilies_reset() { global $wpsmiliestrans; // don't bother setting up smilies if they are disabled if ( !get_option( 'use_smilies' ) ) return; $wpsmiliestrans = array( ':mrgreen:' => 'icon_mrgreen.gif', ':neutral:' => 'icon_neutral.gif', ':twisted:' => 'icon_twisted.gif', ':arrow:' => 'icon_arrow.gif', ':shock:' => 'icon_eek.gif', ':smile:' => 'icon_smile.gif', ':???:' => 'icon_confused.gif', ':cool:' => 'icon_cool.gif', ':evil:' => 'icon_evil.gif', ':grin:' => 'icon_biggrin.gif', ':idea:' => 'icon_idea.gif', ':oops:' => 'icon_redface.gif', ':razz:' => 'icon_razz.gif', ':roll:' => 'icon_rolleyes.gif', ':wink:' => 'icon_wink.gif', ':cry:' => 'icon_cry.gif', ':eek:' => 'icon_surprised.gif', ':lol:' => 'icon_lol.gif', ':mad:' => 'icon_mad.gif', ':sad:' => 'icon_sad.gif', '8-)' => 'icon_cool.gif', '8-O' => 'icon_eek.gif', ':-(' => 'icon_sad.gif', ':-)' => 'icon_smile.gif', ':-?' => 'icon_confused.gif', ':-D' => 'icon_biggrin.gif', ':-P' => 'icon_razz.gif', ':-o' => 'icon_surprised.gif', ':-x' => 'icon_mad.gif', ':-|' => 'icon_neutral.gif', ';-)' => 'icon_wink.gif', // This one transformation breaks regular text with frequency. // '8)' => 'icon_cool.gif', '8O' => 'icon_eek.gif', ':(' => 'icon_sad.gif', ':)' => 'icon_smile.gif', ':?' => 'icon_confused.gif', ':D' => 'icon_biggrin.gif', ':P' => 'icon_razz.gif', ':o' => 'icon_surprised.gif', ':x' => 'icon_mad.gif', ':|' => 'icon_neutral.gif', ';)' => 'icon_wink.gif', ':!:' => 'icon_exclaim.gif', ':?:' => 'icon_question.gif', ); } smilies_reset();
最后,想补充的是,Wordpress 4.2修改了translate_smiley函数。使得输出的表情带样式(style),具体为style="height: 1em; max-height: 1em;"。
这可能会对我们的表情产生影响(我的是被压扁了),因为这个函数本身没有过滤器,所以无法添加过滤,对输出再解码也影响性能,只能修改源文件,来达到目的。具体位置在/wp-includes/formatting.php的第2114行。如下:
return sprintf( '<img src="%s" alt="%s" class="wp-smiley" style="height: 1em; max-height: 1em;" />', esc_url( $src_url ), esc_attr( $smiley ) );
修改为:
return sprintf( '<img src="%s" alt="%s" class="wp-smiley" />', esc_url( $src_url ), esc_attr( $smiley ) );
其实就是删除这个样式。这样就不会对我们现有的表情产生任何影响了。
感谢World和大发。感谢Wordpress的勤劳更新。
2015-04-25补充,函数替换法(替换表情style输出):
add_filter( 'the_content', 'reset_smilies_style', 99 ); add_filter( 'the_excerpt', 'reset_smilies_style', 99 ); add_filter( 'comment_text', 'reset_smilies_style', 99 ); /** * Reset Smilies Style */ function reset_smilies_style( $content ) { return str_replace( 'class="wp-smiley" style="height: 1em; max-height: 1em;"', 'class="wp-smiley"', $content ); }
转载请注明转自:kn007的个人博客的《WordPress 4.2+禁用Emoji表情》
我用颜文字 嘿嘿

对我的影响是函数里面的get_avatar_url不能用了 直接注释掉咯
@World: 我理解。
get_avatar_url。。。你用了大发的某个函数么。。我是pre_config_get_avatar,所以没问题
@kn007: 他的头像延迟加载的函数,后来用了反代,延迟也没有用到,就放那儿了,谁知升级后竟然出问题
@World:
没办法,4.2有这个函数了,一模一样的函数名,肯定会有问题
今天自己弄留言板的时候忽然发现这个页面加载时间特别慢,用谷歌浏览器的network查到,一直在加载一个叫s.w.org的站点。后来终于找到你这里来啦,已经解决了,非常感谢,转载到我的站点了哈,不过我会在最后加上原文地址的,谢谢!
@街头诗人: 不客气,*.w.org属于wordpress所有,目前被墙了。Emoji生成了太多的请求了
补充,感谢disable emoji插件的作者。
@kn007: 现在有这个插件啦?
@街头诗人: 一直都有,前面代码就是取自这个插件。后面的smilies_reset();函数,主要是对smilies_init();做修改,这个取自4.1版本的smilies_init函数。
这表情挺可爱的!!

测试表情。。。。

非法请求?什么情况?
@xiao: 好久没有非法请求了。就是没通过ajax发送评论产生的。
主要是页面没加载完吧。(可能)
谢谢你的代码,终于搞定,只是表情大小懒得改了。。。
@xiao: 不客气
虽然风格各有特点,但最能快速表达表情的还是QQ圆脸表情。。
@笑笑笑: 没新意觉得
@javis:
如果插件搞定就直接插件吧,方便
@zwwooooo: 插件解决一半
倒数第二段代码,少写style="height:1em;max-height:1em"了
@王海达博客: 谢谢指证,也是醉了

现在可以用函数来替换了
@kn007: 函数是什么?
@王海达博客: 发现是被转义了。改好了。
函数替换法,附在文后了,忘记刷新缓存了。
@kn007: 嗯啊,已ctrl+f5,用上了。
@王海达博客: 我说我自己忘记刷新了
文章正文都是被cache的
@王海达博客: 还是要再次谢谢你的提醒
@kn007: 加个QQ?