WordPress4.2移除Emoji颜文字(零插件)

Timle.CN:专注 WordPress建站WordPress主题WordPress插件 分享,同时也关注各种 建站资源前端技巧免费资源IT互联网热点 。CTRL+D即可收藏本站,我们期待您的再次光临!

[文章目录]

这会儿刚刚更新WordPress 4.2版本木有太多的特色说是搞了个颜文字(Emoji)一下没想是个啥?那种文字表情?

完了习惯性刷新W3TC缓存然后随手打开了几个网站页面检查了一下,HTTPS访问的怎么高大上的绿锁没了?扫了一眼浏览器左下角的状态栏发现显示还在加载s.w.org/…中,这是什么鬼,吓老子一跳以为被高端黑叻,仔细查了一下才知道WordPress又整出个外部引用表情符号的坑。

零插件 – 手动移除WordPress4.2中的颜文字

4.2更新完了后台仔细找了又找,没得关闭选项完了想喷叻,TMD现在是不是啥都弄静默安装用户没得做选择的余地?

从2008年的WordPress 2.5版本开始默认主题和控制面板中就各种使用谷歌字体(Google Fonts)没有关闭/切换的选项(患有强迫症的人被人强迫了赤果果的嘲讽啊!),虽然现在没有明确的证据表明谷歌通过这些字体服务跟踪用户的隐私信息,但是有理由相信谷歌有这个技术,为了杜绝这些个不必要(这些个字体国内没法正常直接调用,要么自己下载本地调用,要么用现成的别人的服务,还要各种修改总之就是麻烦)的隐患,果断移除了谷歌字体了事。WordPress4.2移除Emoji颜文字(零插件)

WordPress越更新坑越多

这下WordPress更新到4.2版本弄个颜文字就是木有关闭选项就是默认加载就是和你继续耍流氓,能忍?想想WordPress不是国人主导开发的,网络环境不一样,人家一伙人决定要推个什么东东,咱小胳膊小腿的无法干预任何决定。但是维护WordPress中文版本的那群人都TMD能不能多出点力为zh_CN版本干点实事,别一直跟不上更新节奏,忍不了啊这。也不知道以后再更新又整出个什么花样,对于WordPress已然没有最初的热衷折腾,不过见义勇为还是可以干干的。

下面贴上禁用颜文字的移除代码:

function disable_emoji9s_tinymce( $plugins ) {
	if ( is_array( $plugins ) ) {
		return array_diff( $plugins, array( 'wpemoji' ) );
	} else {
		return array();
	}
}
function remove_emoji9s() {
	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_emoji9s_tinymce' );
}

add_action( 'init', 'remove_emoji9s' );


WordPress-Code-Image

加载WordPress4.2版本之前的主题默认表情

上面已经把Emoji的各种钩子完全移除了,但是如果在文章、评论中的表情还是以四字节编码的Emoji形式出现什么情况?需要如何恢复?

对于这个问题在打开WordPress4.1.2根目录下wp-includes\functions.php第2755行对比WordPress4.2根目录下wp-includes\functions.php第2946行,就吐槽叻:坑啊,注释不变版本号不变,这函数咋变了?一小部分smiley大部分emoji这是要闹哪样啊!WordPress4.2还能正常使用主题自带的默认表情?

解决办法·复制代码如下:

//关闭后台可视化文章编辑器中的wpemoji插件
function disable_emoji9s_tinymce( $plugins ) {
	if ( is_array( $plugins ) ) {
		return array_diff( $plugins, array( 'wpemoji' ) );
	} else {
		return array();
	}
}

//返回当前主题下img\smilies\下表情图片路径
function custom_smilie9s_src( $old, $img ) {
    return get_stylesheet_directory_uri().'/img/smilies/'.$img;
}

function init_smilie9s(){
	global $wpsmiliestrans;
	//默认表情文本与表情图片的对应关系(可自定义修改)
	$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',
		       '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',
	);
	//移除WordPress4.2版本更新所带来的Emoji前后台钩子同时挂上主题自带的表情路径
	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_emoji9s_tinymce' );

	add_filter( 'smilies_src' , 'custom_smilie9s_src' , 10 , 2 );
}

add_action( 'init', 'init_smilie9s', 5 );

关于恢复自定义表情后样式异常的解决办法

继续吐槽:

WordPress4.2版本wp-includes\formatting.php文件第2085行的translate_smiley函数。在注解/版本号基本(只是4.2版本注解少了两个单引号而已 :arrow: )没变的情况下强行(这货函数没有直接提供钩子)为表情加了element.style{height: 1em; max-height: 1em;}这感觉就是不给使用多年的默认表情一点活路死命要推广颜文字的节奏。

这里提供如下三种解决方法:

  • 方法1.将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 ) );

这是最直接最暴力的方法,但是WordPress后续再有更新(哪怕没有更新这几个文件)文件会被覆盖又还得改。麻烦·故不推荐。

  • 方法2.在全站CSS文件(一般是主题根目录下的style.css文件,当然也可以是其它的全站CSS文件)中加入:
.wp-smiley{height: 100% !important;max-height: 100% !important;}

缺点:IE系列版本浏览器对CSS的!important属性不怎么支持。网站访客都是Chrome、Mozilla Firefox等现代主流浏览器(不考虑低于IE7的死活)的朋友,这是最佳解决方法,极力推荐!

  • 方法3.适用症状:强迫症+酷爱代码+WordPress脑粉+忧伤怀旧系列+半分完美主义
function convert_smilie9s( $text ) {
	global $wp_smiliessearch;
	$output = '';
	if ( get_option( 'use_smilies' ) && ! empty( $wp_smiliessearch ) ) {
		$textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE );
		$stop = count( $textarr );// loop stuff
		$tags_to_ignore = 'code|pre|style|script|textarea';
		$ignore_block_element = '';
		for ( $i = 0; $i < $stop; $i++ ) {
			$content = $textarr[$i];
			if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) )  {
				$ignore_block_element = $matches[1];
			}
			if ( '' ==  $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) {
				$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );
			}
			if ( '' != $ignore_block_element && '' == $content )  {
				$ignore_block_element = '';
			}
			$output .= $content;
		}
		//看到两''没?(可对应修改wp-smiley的element.style样式,如果懒的再去修改CSS)
		$output = str_replace( 'style="height: 1em; max-height: 1em;" ' , '' , $output );
	} else {
		$output = $text;
	}
	return $output;
}

remove_filter( 'the_content' , 'convert_smilies' );
remove_filter( 'the_excerpt' , 'convert_smilies' );
remove_filter( 'comment_text' , 'convert_smilies' , 20 );
add_filter( 'the_content' , 'convert_smilie9s' );
add_filter( 'the_excerpt' , 'convert_smilie9s' );
add_filter( 'comment_text' , 'convert_smilie9s' , 20 );

妥妥的让文章、摘要、评论中的所有表情重见天日(完整的回到WordPress4.2之前的状态),前提是大体符合上述症状,不怕麻烦(两段代码合一块实在有点长叻,粘贴复制什么的很累),嫌弃的还是不要玩了!

使用方法:两段主要代码都是复制粘贴到当前主题的functions.php文件末尾即可,有使用缓存的刷新一下缓存看效果。

注意事项:修改代码后保存文件注意使用UTF-8编码,如果你不知道你编辑代码的编辑器靠不靠谱的话。

关于本文:主要是移除WordPress4.2版本颜文字(Emoji)加载所需的JS、CSS以及恶心无耻默认集成到wp_mail函数的等等钩子,同时添加了一个钩子把Tinymce编辑器中的颜文字也搞(替换)掉。拒绝被狗仔队跟踪,从我做起!

对于了理(移除)Emoji的方法、WordPress表情异常(口角歪斜?被缩小?等等已知未知症状)需要整治的朋友;如果你有好的建议/方法请在下方留言与作者取得联系,我们一起解决它!完善它!

转自:九秒记忆       文:http://www.9sep.org/remove-emoji-in-wordpress

版权声明:本站所有文章和资源使用CC BY-NC-SA 3.0 CN协议发布,转载应当以相同方式注明并注明文章来自“Timle.CN -> WordPress4.2移除Emoji颜文字(零插件)”。在页面右边可以分享本文哦!

有 7 发吐槽 关于 “WordPress4.2移除Emoji颜文字(零插件)

  1. 沙发
    text 2015-04-29
    头像- –
    • 回复
      Timle.CN 2015-04-30
      @text :mrgreen: :mrgreen: 表情头像都OK的,你的头像没有设置,显示的空白,还有,你邮箱[email protected]?别逗我玩了。
  2. 板凳
    Amigo 2015-04-30
    你这昵称后面的’VIP7’是怎么搞的,有点炫酷。
    • 回复
      Timle.CN 2015-04-30
      @Amigo 站内搜索VIP,第一篇有介绍 :smile:
  3. 地板
    LEEJON 2016-03-8
    :razz: 感谢,用了最后一段代码搞定了,中间删除了一些代码,不然后台会有点慢。
  4. 4楼
    Jason 2017-07-2
    function init_smilie9s(){add_action( ‘init’, ‘init_smilie9s’, 5 );这个有什么用
  5. 5楼
    Jason 2017-07-2
    我用这个/自定义表情路径和名称function custom_smilie9s_src($src, $img){ return get_bloginfo(‘template_directory’).’/images/smilies/’ . $img;} if ( !isset( $wpsmiliestrans ) ) { $wpsmiliestrans = array(删除那个也可以啊

疑问 难过 胜利 微笑 抠鼻 可爱 抓狂 偷笑 奋斗 衰 撇嘴 色 贼笑 爬虫 鼓掌 发怒 擦汗 握手 酷 玫瑰 哭 呲牙

WordPress4.2移除Emoji颜文字(零插件)
5 票, 4.60 平均等级 ( 92% 分 )