β

记一次WordPress评论替换以及禁用emoji的修复过程

ian博客 160 阅读

前言:

之前一直使用多说的评论服务,但是最近多说出现了2次比较严重的问题。所以我决定启用原生的评论,但是在恢复的过程中出现了一些问题,把修复过程记录下来与大家分享!

问题一:

发表评论的地方原主题的表情显示不出来了,被emoji表情所替代。
1994html1

解决方法:

在WordPress4.2之后,使用了Emoji表情,原有自定义表情快捷符号无法再转换为表情图片gif,所以需要禁用前台与后台的相关emoji表情加载脚本,并修改css文件调整大小。
加入以下代码至主题的functions.php内

  1. /**
  2.  * 修复WordPress升级4.2自定义表情的各种问题
  3.  */
  4.     function disable_emoji($plugins) {
  5.     if (is_array($plugins)) {
  6.     return array_diff($plugins, array(
  7.     'wpemoji'
  8.     ));
  9.     } else {
  10.     return array();
  11.     }
  12.     }
  13.     //取当前主题下images\smilies\下表情图片路径
  14.     function custom_smilie_src($old, $img) {
  15.     return get_stylesheet_directory_uri() . '/images/smilies/' . $img;
  16.     }
  17.     function init_fixsmilie() {
  18.     global $wpsmiliestrans;
  19.     //默认表情文本与表情图片的对应关系(可自定义修改)
  20.     $wpsmiliestrans = array(
  21.     ':mrgreen:' => 'icon_mrgreen.gif',
  22.     ':neutral:' => 'icon_neutral.gif',
  23.     ':twisted:' => 'icon_twisted.gif',
  24.     ':arrow:' => 'icon_arrow.gif',
  25.     ':shock:' => 'icon_eek.gif',
  26.     ':smile:' => 'icon_smile.gif',
  27.     ':???:' => 'icon_confused.gif',
  28.     ':cool:' => 'icon_cool.gif',
  29.     ':evil:' => 'icon_evil.gif',
  30.     ':grin:' => 'icon_biggrin.gif',
  31.     ':idea:' => 'icon_idea.gif',
  32.     ':oops:' => 'icon_redface.gif',
  33.     ':razz:' => 'icon_razz.gif',
  34.     ':roll:' => 'icon_rolleyes.gif',
  35.     ':wink:' => 'icon_wink.gif',
  36.     ':cry:' => 'icon_cry.gif',
  37.     ':eek:' => 'icon_surprised.gif',
  38.     ':lol:' => 'icon_lol.gif',
  39.     ':mad:' => 'icon_mad.gif',
  40.     ':sad:' => 'icon_sad.gif',
  41.     '8-)' => 'icon_cool.gif',
  42.     '8-O' => 'icon_eek.gif',
  43.     ':-(' => 'icon_sad.gif',
  44.     ':-)' => 'icon_smile.gif',
  45.     ':-?' => 'icon_confused.gif',
  46.     ':-D' => 'icon_biggrin.gif',
  47.     ':-P' => 'icon_razz.gif',
  48.     ':-o' => 'icon_surprised.gif',
  49.     ':-x' => 'icon_mad.gif',
  50.     ':-|' => 'icon_neutral.gif',
  51.     ';-)' => 'icon_wink.gif',
  52.     '8O' => 'icon_eek.gif',
  53.     ':(' => 'icon_sad.gif',
  54.     ':)' => 'icon_smile.gif',
  55.     ':?' => 'icon_confused.gif',
  56.     ':D' => 'icon_biggrin.gif',
  57.     ':P' => 'icon_razz.gif',
  58.     ':o' => 'icon_surprised.gif',
  59.     ':x' => 'icon_mad.gif',
  60.     ':|' => 'icon_neutral.gif',
  61.     ';)' => 'icon_wink.gif',
  62.     ':!:' => 'icon_exclaim.gif',
  63.     ':?:' => 'icon_question.gif',
  64.     );
  65.     //移除WordPress4.2版本更新所带来的Emoji钩子同时挂上主题自带的表情路径
  66.     remove_action('wp_head', 'print_emoji_detection_script', 7);
  67.     remove_action('admin_print_scripts', 'print_emoji_detection_script');
  68.     remove_action('wp_print_styles', 'print_emoji_styles');
  69.     remove_action('admin_print_styles', 'print_emoji_styles');
  70.     remove_filter('the_content_feed', 'wp_staticize_emoji');
  71.     remove_filter('comment_text_rss', 'wp_staticize_emoji');
  72.     remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
  73.     add_filter('tiny_mce_plugins', 'disable_emoji');
  74.     add_filter('smilies_src', 'custom_smilie_src', 10, 2);
  75.     }
  76.     add_action('init', 'init_fixsmilie', 5);

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

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

问题二:

无法发表评论,显示get from image source failed:E405错误
1994html2

解决方法:

此问题是由于七牛插件引起的。
修改主题的comments-ajax.js文件
在以下代码的的下面

  1. var i = 0, got = -1, len = document.getElementsByTagName('script').length;
  2. while ( i <= len && got == -1){
  3. 	var js_url = document.getElementsByTagName('script')[i].src,
  4. 			got = js_url.indexOf('comments-ajax.js'); i++ ;
  5. }

加入

  1. js_url = js_url.replace('ianisme.u.qiniudn.com','www.ianisme.com');

然后在七牛强制刷新这个文件(七牛刷新特别慢,这个多等会吧!)
1994html3

问题三:

评论重复
1994html4

解决方法:

上次多说出问题的时候,我进行了多说评论同步到本地的操作,没想到竟然导致所有评论都重复了,此时,我们在数据库执行以下语句即可清除重复的评论

  1. create table tmp as select min(comment_ID) as col1 from wp_comments group by comment_date;
  2. delete from wp_comments where comment_ID not in (select col1 from tmp); 
  3. drop table tmp;

此处,我是以评论的时间为筛选条件的。

总结:

以上是这次的具体修复过程,如有疑问请留言,谢谢!

作者:ian博客
iOS开发者|不仅仅是一名iOS开发者