wordpress去除wp-emoji-release.min.js和启用wp-emoji的方法

wordpress会默认加载wp-emoji-release.min.js这个图标库。但是一般没有什么用。

wordpress禁用emoji

方法一:

在functions.php中插入代码

/**
* 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.
*/
function disable_emojis_tinymce($plugins){
if (is_array($plugins)){
return array_diff( $plugins, array( 'wpemoji' ) );
} else {
return array();
}
}

 

方法二:

现在最新版的wordpress4.2添加了对Emoji的支持,可以看这里
http://codex.wordpress.org/Emoji
如果不想显示这个东西,你可以关闭它们
https://wordpress.org/plugins/disable-emojis/

 

wordpress启用本地 Emoji 表情

Twitter Emoji 表情包下载,下载后直接解压至主题目录,文件夹名不变。将以下代码放在主题目录下的 functions.php 文件中:

//首先补全wp的表情库
function smilies_reset() {
global $wpsmiliestrans, $wp_smiliessearch;
// don't bother setting up smilies if they are disabled
if (!get_option('use_smilies')) {
return;
}
$wpsmiliestrans_fixed = array(
':mrgreen:' => "\xf0\x9f\x98\xa2",
':smile:' => "\xf0\x9f\x98\xa3",
':roll:' => "\xf0\x9f\x98\xa4",
':sad:' => "\xf0\x9f\x98\xa6",
':arrow:' => "\xf0\x9f\x98\x83",
':-(' => "\xf0\x9f\x98\x82",
':-)' => "\xf0\x9f\x98\x81",
':(' => "\xf0\x9f\x98\xa7",
':)' => "\xf0\x9f\x98\xa8",
':?:' => "\xf0\x9f\x98\x84",
':!:' => "\xf0\x9f\x98\x85",
);
$wpsmiliestrans = array_merge($wpsmiliestrans, $wpsmiliestrans_fixed);
}
//替换cdn路径
function static_emoji_url() {
return get_bloginfo('template_directory').'/72x72/';
}
//让文章内容和评论支持 emoji 并禁用 emoji 加载的乱七八糟的脚本
function reset_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');
add_filter('the_content', 'wp_staticize_emoji');
add_filter('comment_text', 'wp_staticize_emoji',50); //在转换为表情后再转为静态图片
smilies_reset();
add_filter('emoji_url', 'static_emoji_url');
}
add_action('init', 'reset_emojis');
//输出表情
function fa_get_wpsmiliestrans(){
global $wpsmiliestrans;
$wpsmilies = array_unique($wpsmiliestrans);
foreach($wpsmilies as $alt => $src_path){
$emoji = str_replace(array('', ';'), '', wp_encode_emoji($src_path));
$output .= '<a class="add-smily" data-smilies="'.$alt.'"><img class="wp-smiley" src="'.get_bloginfo('template_directory').'/72x72/'. $emoji .'png" /></a>';
}
return $output;
}

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

上面已经把Emoji的各种钩子完全移除了,但是如果在文章、评论中的表情还是以四字节编码的Emoji形式出现什么情况?需要如何恢复?对于这个问题在打开WordPress4.1.2根目录下wp-includes\functions.php第2755行对比WordPress4.2根目录下wp-includes\functions.php第2946行,就吐槽叻:坑啊,注释不变版本号不变,这函数咋变了?一小部分smiley大部分emoji这是要闹哪样啊!wp-emoji-release.min.js这货加载twemoji.maxcdn.com专门为了推广Maxcdn的嘛?后台都不能正常进行文章编辑发布叻!WordPress4.2还能正常玩耍嘛?还能正常使用主题自带的默认表情?

解决办法·使用WordPress4.2 Emoji补丁代码如下:

//禁用后台文章可视化编辑器中的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" />', 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{float: left;height: 100% !important;max-height: 100% !important;}

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

3.适用症状:强迫症+酷爱代码+WordPress脑粉+忧伤怀旧系列+半分完美主义

function convert_smilie9s( $text ) {
//看到两''没?(默认为空就好,如果懒的再为表情样式去修改全站CSS文件,可在这对应的为wp-smiley添加element.style样式)
	return str_replace( '' , '' , $text );
}

add_filter( 'the_content' , 'convert_smilie9s' , 11 );
add_filter( 'the_excerpt' , 'convert_smilie9s' , 11 );
add_filter( 'comment_text' , 'convert_smilie9s' , 21 );

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

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

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

 

参考地址:

http://www.9sep.org/remove-emoji-in-wordpress

http://www.2zzt.com/jcandcj/7237.html

http://www.wufangbo.com/wp-emoji-release/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>