前天老蒋在群里有看到网友在登录WordPress后台编辑器更新文章的时候有出现"Failed to load plugin:wpemoji"问题提示。然后搜索相关问题确实还是没有见到,但是从提示上看应该是在加载wpemoji的时候错误,可能是某个文件没有加载出来导致的。那问题如何解决呢?
第一、禁用 Emoji 功能
> /
> * Disable the emoji Edit By itbulu.com
> */
> 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();
> }
> }
这功能用户一般用不上,我们就禁止掉。
第二、本地化设置
WordPress 在有些旧版本浏览器为了兼容显示Emoji 表情图标,它会调用 http://s.w.org/images/core/emoji/72x72/ 目录下的图片渲染Emoji 表情图标。由于网络问题会无法加载。我们可以将这个目录本地化后直接用脚本替换本地化。
> //Emoji 本地化 Edit By itbulu.com
> 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(
> '' => "\xf0\x9f\x98\xa2",
> '🙂' => "\xf0\x9f\x98\xa3",
> '🙄' => "\xf0\x9f\x98\xa4",
> '🙁' => "\xf0\x9f\x98\xa6",
> '➡' => "\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('&#x', ';'), '', 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;
> }
我们需要在主题目录下创建/72x72/目录,然后将对应的表情表下载到这个目录中。