Отключение эмодзи, добавленных в WordPress 4.2
WordPress 4.2 добавил поддержку эмодзи (смайликов), что автоматически внедряет JavaScript и другие лишние файлы на страницы сайта. Для некоторых пользователей это может оказаться неприятным сюрпризом. Как можно полностью удалить все проявления этой функции?
Мы подключимся к хуку 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' );

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

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

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

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

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

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

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

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

Лучшее решение, если вы хотите отключить это: используйте плагин.
Тот же код из комментариев Кристины: https://wordpress.org/plugins/disable-emojis/
Тот же код, который также исправляет смайлы на старые: https://wordpress.org/plugins/classic-smilies/
Источник: Я, так как я написал этот код изначально. https://plugins.trac.wordpress.org/changeset/1142480/classic-smilies

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

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

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

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

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

Я попробовал несколько кодов выше, но единственный, который сработал у меня — это данный код.
Не забудьте сделать резервную копию файла 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' );

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

Хорошие новости, я добавил запрос на новую функцию:
Добавить новую опцию WP_EMOICONS в WordPress вот здесь https://core.trac.wordpress.org/ticket/38252
и, судя по всему, этот запрос был помечен как дубликат https://core.trac.wordpress.org/ticket/32102 так что мы можем ожидать что-то вроде
define( 'WP_EMOICONS', false );
в будущих релизах WordPress.

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

Поскольку эмодзи WordPress загружаются с s.w.org и не сжаты, это влияет на время загрузки SVG в зависимости от количества используемых эмодзи и может даже вызывать предупреждения в инструменте Google PageSpeed Insights.
Чтобы решить эту проблему, вы можете загружать эмодзи напрямую со своего сайта WordPress, а не через внешние вызовы через JavaScript.
Это можно сделать, установив бесплатный плагин Compressed Emoji, доступный в репозитории WordPress.org.
После активации плагина сжатие обеспечивает экономию в диапазоне от 3 КБ до 1,3 КБ (примерно 60%) для каждого эмодзи.
Источник: WPTavern
