Отключение эмодзи, добавленных в WordPress 4.2

27 апр. 2015 г., 22:37:49
Просмотры: 64.3K
Голосов: 147

WordPress 4.2 добавил поддержку эмодзи (смайликов), что автоматически внедряет JavaScript и другие лишние файлы на страницы сайта. Для некоторых пользователей это может оказаться неприятным сюрпризом. Как можно полностью удалить все проявления этой функции?

2
Комментарии

Я был настолько шокирован, что чуть не упал со стула, когда прочитал это объявление

Tom J Nowell Tom J Nowell
27 апр. 2015 г. 23:33:57

o_O ... 9_9 ... >:-(

cjbj cjbj
10 окт. 2016 г. 11:20:33
Все ответы на вопрос 7
9
204

Мы подключимся к хуку init и удалим действия следующим образом:

function disable_wp_emojicons() {

  // все действия, связанные с эмодзи
  remove_action( 'admin_print_styles', 'print_emoji_styles' );
  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_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
  remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
  remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );

  // фильтр для удаления эмодзи в TinyMCE
  add_filter( 'tiny_mce_plugins', 'disable_emojicons_tinymce' );
}
add_action( 'init', 'disable_wp_emojicons' );

Нам понадобится следующий фильтр, чтобы отключить эмодзи в TinyMCE:

function disable_emojicons_tinymce( $plugins ) {
  if ( is_array( $plugins ) ) {
    return array_diff( $plugins, array( 'wpemoji' ) );
  } else {
    return array();
  }
}

Теперь мы вздыхаем и делаем вид, что эта функция никогда не добавлялась в ядро... особенно учитывая, что множество исправленных багов ещё не были реализованы.

Это доступно в виде плагина Disable Emojis.

Альтернативно, вы можете заменить смайлы на оригинальные версии из предыдущих версий WordPress с помощью Classic Smilies.

Обновление

Мы также можем удалить DNS prefetch, возвращая false в фильтре emoji_svg_url (спасибо @yobddigi):

add_filter( 'emoji_svg_url', '__return_false' );
27 апр. 2015 г. 22:37:49
Комментарии

Спасибо! Не понимаю, почему они просто не добавили возможность включать/отключать это через Настройки -> Написание, но это определённо раздражает. +1

Howdy_McGee Howdy_McGee
27 апр. 2015 г. 22:42:05

Жду ваш плагин "Отключение emojicons" в репозитории или на GitHub ;-)

birgire birgire
27 апр. 2015 г. 22:44:05

И не забудьте добавить ссылку в своём ответе, где можно скачать плагин ;-)

Pieter Goosen Pieter Goosen
27 апр. 2015 г. 22:53:54

уже есть несколько подобных плагинов (этот является копией) https://wordpress.org/plugins/classic-smilies/ https://wordpress.org/plugins/disable-emojis/

pcarvalho pcarvalho
28 апр. 2015 г. 20:38:15

Спасибо за ответ! Не могу поверить, что это часть ядра, по крайней мере без возможности "отказаться" или отключить это ~_~

phatskat phatskat
30 апр. 2015 г. 00:47:19

И шокирует, что они добавляют 114 строк скриптов и стилей в заголовок, которые даже не минифицированы. Спасибо за плагин...

Debajyoti Das Debajyoti Das
22 июл. 2015 г. 15:39:01

возможно, стоит также добавить это: add_filter( 'emoji_svg_url', '__return_false' ); это убирает dns prefetch

thebigtine thebigtine
13 сент. 2016 г. 12:51:57

@yobddigi Очень хорошо, я обновил соответственно!

Christine Cooper Christine Cooper
13 сент. 2016 г. 13:37:08

WP бьёт нас сильно - начиная с версии 4.3 "опция отключения графических смайлов была удалена из новых установок" и нет, "смайлы" не являются "эмодзи"... Теперь вам нужно либо a) add_filter( 'option_use_smilies', function(){ return false; } ); либо b) использовать этот плагин (который делает ТОЧНО ТО ЖЕ САМОЕ) : https://wordpress.org/plugins/keep-emoticons-as-text/ Я действительно задаюсь вопросом, кто решил: "Да, давайте просто изменять контент пользователей через PHP, без лишних вопросов..." ... -_-

jave.web jave.web
12 апр. 2017 г. 18:22:43
Показать остальные 4 комментариев
2
29

Лучшее решение, если вы хотите отключить это: используйте плагин.

Тот же код из комментариев Кристины: https://wordpress.org/plugins/disable-emojis/

Тот же код, который также исправляет смайлы на старые: https://wordpress.org/plugins/classic-smilies/

Источник: Я, так как я написал этот код изначально. https://plugins.trac.wordpress.org/changeset/1142480/classic-smilies

29 апр. 2015 г. 01:02:29
Комментарии

Отлично! Хотя я нашел эти функции через запись на GitHub. Я обновил свой ответ, добавив ссылки на плагины. Спасибо!

Christine Cooper Christine Cooper
29 апр. 2015 г. 04:00:05

Да, скорее всего, так и было. Я также выложил это на GitHub для пользователя Twitter: https://gist.github.com/Otto42/b79ff5428993fcff45bb

Otto Otto
29 апр. 2015 г. 16:07:18
3
15

Это простой способ удаления эмодзи. Добавьте следующий код в ваш файл function.php

remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' ); 
25 июн. 2015 г. 00:48:49
Комментарии

Это уже было рассмотрено в моем вопросе выше.

Christine Cooper Christine Cooper
22 июл. 2015 г. 15:38:31

Спасибо, это отлично удаляет код - странно, но мои страницы загружаются на 2-3 секунды дольше с этим кодом в functions.php, чем без него.

Steve Steve
21 июл. 2017 г. 15:11:31

Это должно выполняться через init. Смотрите мой ответ.

Christine Cooper Christine Cooper
19 авг. 2017 г. 20:35:42
0

Если вы хотите полностью отключить автоматическое преобразование старых ASCII-смайлов в Unicode-эмодзи в WordPress (например, ;-) в ), вы можете использовать remove_filter('the_content', 'convert_smilies').

(Не уверен на 100%, что это именно то, о чем был вопрос, но это решило мою проблему, и, надеюсь, кому-то пригодится.)

13 июн. 2017 г. 17:48:00
3

Я попробовал несколько кодов выше, но единственный, который сработал у меня — это данный код.

Не забудьте сделать резервную копию файла functions.php перед внедрением этих кодов.

// УДАЛЕНИЕ WP EMOJI
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
10 июл. 2017 г. 07:33:11
Комментарии

Вы правильно протестировали код из моего ответа?

Christine Cooper Christine Cooper
10 июл. 2017 г. 10:44:26

Да, я пробовал много раз, сайт работает на сервере cloudflare-nginx

johnhgaspay johnhgaspay
10 июл. 2017 г. 11:23:26

Еще раз проверил свой код, и он работает. Когда добавляете код в файл functions.php, попробуйте установить более высокий приоритет, вот так: add_action( 'init', 'disable_wp_emojicons', 3 );

Christine Cooper Christine Cooper
10 июл. 2017 г. 12:22:48
2
-1

Хорошие новости, я добавил запрос на новую функцию:

Добавить новую опцию WP_EMOICONS в WordPress вот здесь https://core.trac.wordpress.org/ticket/38252

и, судя по всему, этот запрос был помечен как дубликат https://core.trac.wordpress.org/ticket/32102 так что мы можем ожидать что-то вроде

define( 'WP_EMOICONS', false );

в будущих релизах WordPress.

7 окт. 2016 г. 16:04:59
Комментарии

Похоже, тикет #32102 закрыт с пометкой wontfix. +1 за попытку и оптимизм ;-)

birgire birgire
7 окт. 2016 г. 17:13:09

P.S.: Насколько я понимаю, ваш тикет #38252 был закрыт как дубликат тикета #32102, который ранее был закрыт как wontfix. Похоже, плагинам придётся разбираться с этим самостоятельно в обозримом будущем ;-) Поэтому голосую за ваш оптимизм ;-)

birgire birgire
7 окт. 2016 г. 17:23:04
0
-2

Поскольку эмодзи WordPress загружаются с s.w.org и не сжаты, это влияет на время загрузки SVG в зависимости от количества используемых эмодзи и может даже вызывать предупреждения в инструменте Google PageSpeed Insights.

Чтобы решить эту проблему, вы можете загружать эмодзи напрямую со своего сайта WordPress, а не через внешние вызовы через JavaScript.

Это можно сделать, установив бесплатный плагин Compressed Emoji, доступный в репозитории WordPress.org.

После активации плагина сжатие обеспечивает экономию в диапазоне от 3 КБ до 1,3 КБ (примерно 60%) для каждого эмодзи.

Источник: WPTavern

15 нояб. 2016 г. 16:17:59