升级4.2之后使用了Emoji表情,原有自定义表情快捷符号无法再转换为表情图片gif,所以需要禁用emoji,然而禁用之后虽然原有表情可以显示,但表情变小了,一查原来是wp-includes/formatting.php文件里面给wp-smiley加载了多余的样式height: 1em ...,下面有两种方法可以一并解决这些问题,这样不管wp怎么升级都不会受到影响了:

方法一

前台和后台都禁用emoji表情的css和js的加载,使用相应的钩子过滤掉。然后再用钩子改写wp-includes/formatting.php文件里面的两个系统函数以修正css即可。下面代码加入主题functions.php文件中

/**
 * 修复WordPress升级4.2自定义表情的各种问题
 */
remove_action( 'wp_head','print_emoji_detection_script',7);     //解决4.2版本部分主题大量404请求问题
remove_action( 'init',       'smilies_init',               5);  //移除4.2版本表情钩子
remove_action( 'wp_print_styles',   'print_emoji_styles'    );  //移除4.2版本前台表情样式钩子
remove_action( 'admin_print_styles',    'print_emoji_styles');  //移除4.2版本后台表情样式钩子
remove_action('admin_print_scripts', 'print_emoji_detection_script'); //移除4.2版本后台表情加载脚本 s.w.org 连不上修复
remove_action( 'the_content_feed',      'wp_staticize_emoji');  //移除4.2 emoji相关钩子
remove_action( 'comment_text_rss',      'wp_staticize_emoji');  //移除4.2 emoji相关钩子
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',     'inlo_convert_smilies',    20);  //自定义表情相关钩子
add_action( 'the_content',          'inlo_convert_smilies'   );  //自定义表情相关钩子
add_action( 'the_excerpt',      'inlo_convert_smilies'       );  //自定义表情相关钩子
add_action( 'init',         'inlo_smilies_init',     5       );  //自定义表情钩子

//原函数 smilies_init 位于wp-includes/functions.php
function inlo_smilies_init() {
    global $wpsmiliestrans, $wp_smiliessearch;
    // don't bother setting up smilies if they are disabled
    if ( !get_option( 'use_smilies' ) )
        return;
    if ( !isset( $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',
        // 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',
        );
    }
    if (count($wpsmiliestrans) == 0) {
        return;
    }
    /*
     * NOTE: we sort the smilies in reverse key order. This is to make sure
     * we match the longest possible smilie (:???: vs :?) as the regular
     * expression used below is first-match
     */
    krsort($wpsmiliestrans);
    $spaces = wp_spaces_regexp();
    // Begin first "subpattern"
    $wp_smiliessearch = '/(?<=' . $spaces . '|^)';
    $subchar = '';
    foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
        $firstchar = substr($smiley, 0, 1);
        $rest = substr($smiley, 1);
        // new subpattern?
        if ($firstchar != $subchar) {
            if ($subchar != '') {
                $wp_smiliessearch .= ')(?=' . $spaces . '|$)';  // End previous "subpattern"
                $wp_smiliessearch .= '|(?<=' . $spaces . '|^)'; // Begin another "subpattern"
            }
            $subchar = $firstchar;
            $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
        } else {
            $wp_smiliessearch .= '|';
        }
        $wp_smiliessearch .= preg_quote($rest, '/');
    }

    $wp_smiliessearch .= ')(?=' . $spaces . '|$)/m';
}
/**
 * 原函数 translate_smiley 位于wp-includes/formatting.php
 */
function inlo_translate_smiley( $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;
    }
    // 以下表情路径修改为主题下的表情所在路径
    $src_url = apply_filters( 'smilies_src', get_bloginfo('template_directory').'/img/smilies/'.$img, $img, site_url() );

    return sprintf( '<img src="%s" alt="%s" class="wp-smiley" />', esc_url( $src_url ), esc_attr( $smiley ) );
}

/**
 * 原函数 convert_smilies 位于wp-includes/formatting.php
 */
function inlo_convert_smilies( $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, 'inlo_translate_smiley', $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;
}

这样就OK了,不过要注意的是,INLOSPEED主题的评论回调函数内使用了convert_smilies 函数,上面的代码已经重写了这个函数,重新定义为 inlo_convert_smilies 函数,所以要在输出评论列表的回调函数内将convert_smilies(get_comment_text())改为inlo_convert_smilies(get_comment_text())即可。

方法二

只禁用前台与后台的相关emoji表情加载脚本,样式禁用不了,表情还是很小,我们可以通过修改主题的css来改变。加入以下代码至主题的functions.php

/**
 * 修复WordPress升级4.2自定义表情的各种问题
 */
    function disable_emoji($plugins) {
    if (is_array($plugins)) {
    return array_diff($plugins, array(
    'wpemoji'
    ));
    } else {
    return array();
    }
    }
    //取当前主题下img\smilies\下表情图片路径
    function custom_smilie_src($old, $img) {
    return get_stylesheet_directory_uri() . '/img/smilies/' . $img;
    }
    function init_fixsmilie() {
    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_emoji');
    add_filter('smilies_src', 'custom_smilie_src', 10, 2);
    }
    add_action('init', 'init_fixsmilie', 5);

然后在主题的Style.css内添加样式

.wp-smiley{max-height: 100% !important;height: 100% !important;}

再稍微调整一下相对位置即可。

相比之下,方法二更好,代码更少。