Июн
1
7

Как отключить emoji в WordPress

Как отключить emojiПару лет назад я рассказывал об интересном плагине эмодзи для вордпресс, который позволял добавить в админку поддержку данных смайликов. После установки модуля WP Emoji One в текстовом редакторе появлялось много интересных иконок для украшения статей блога. Спустя некоторое время разработчики WordPress 4.2 решили упростить всем жизнь и интегрировали эмозди в ярдо системы.

Возможно, они и руководствовались благими намерениями, только вот задумка получилось слегка поспешной. Я бы не сказал, что это насколько важная и актуальная функция чтобы автоматически добавлять ее всем пользователям. Поэтому не удивительно, что вопрос как отключить emoji возникает у многих.

В вордпресс header и так перегружен множеством лишних скриптов, не хватало тут еще эмозди. Вместе со всеми стандартными элементами в HEAD сайта грузится скрипт wp-emoji-release.min.js + стили. Если вы не планируете использовать данную функцию в работе, имеет смысл отключить эмодзи.

Существует 2 метода решения задачи — через файл функций и с помощью плагина.

Хак отключения Emoji

Чтобы удалить эмодзи из HEAD вам нужно:

  1. Зайти в раздел админки «Внешний вид» — «Редактор».
  2. Открыть для редактирования файл functions.php.
  3. Добавляете в код следующие строки:
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
  1. Сохраняете файл и проверяете наличие скрипта в исходниках веб-страницы сайта. Его там, разумеется, быть не должно.

Кстати, в сети я встречал еще один альтернативный вариант. Он более громоздкий и содержит куда больше строк кода. Я так понимаю решение позволяет отключить emoji в wordpress админке, а не только на сайте. В частности функция disable_emojicons_tinymce убирает поддержку смайликов из редактора TinyMCE.

function disable_wp_emojicons() {
 
  // all actions related to emojis
  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' );
 
  // filter to remove TinyMCE emojis
  add_filter( 'tiny_mce_plugins', 'disable_emojicons_tinymce' );
}
add_action( 'init', 'disable_wp_emojicons' );
 
function disable_emojicons_tinymce( $plugins ) {
  if ( is_array( $plugins ) ) {
    return array_diff( $plugins, array( 'wpemoji' ) );
  } else {
    return array();
  }
}

Обновление 9.07.2017: В комментах ниже заметили, что нужно также удалить вызов эмодзи в DNS настройках. Для этого можно попробовать фильтр:

add_filter( 'emoji_svg_url', '__return_false' );

Или используйте код Дмитрия из комментариев:

function disable_emojis_remove_dns_prefetch( $urls, $relation_type ) {
if ( 'dns-prefetch' == $relation_type ) {
/** This filter is documented in wp-includes/formatting.php */
$emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' );
 
$urls = array_diff( $urls, array( $emoji_svg_url ) );
}
 
return $urls;
}

Но не забудьте при этом сделать вызов самой функции:

add_filter( 'wp_resource_hints', 'disable_emojis_remove_dns_prefetch', 10, 2 );

Добавляете весь код аналогично в functions.php. После внедрения получится будто бы функциональность Emoji никогда в ядро и не добавлялась:) Кстати, данный вариант решения также реализуется и через специальный плагин, речь о котором пойдет ниже.

Disable Emojis

Тем, кому сложно или страшно делать правки в файлах шаблона, советуем просто воспользоваться готовым модулем.

Плагин Disable Emojis - отключаем эмодзи

Скачать Disable Emojis можно тут либо установить через админку. Плагин работает сразу после установки и не содержит никаких настроек. Преимущество этого метода в том, что при смене шаблона вам не придется заново вносить правки в functions.php.

Кстати, интересный комментарий в описании модуля от разработчика. Он утверждает, что даже после отключения Emoji они все равно будут работать в тех браузерах, что имеют встроенную поддержку функции. Модуль же просто позволяет убрать emoji код из wordpress, который используется для поддержки старых браузеров.

Если же вы захотите заменить эмодзи на обычные «рожицы», то используйте разные плагины смайликов о которых я рассказывал ранее.

Что вообще думаете про идею отключить emoji в WordPress? Уже реализовали это в своем блоге? Я для одного проекта под заказ уже успел их убрать.

комментариев 7 к статье “Как отключить emoji в WordPress”

  • Валерий   01.06.2016

    Спасибо очень полезно и интересно! С уважением, Валерий Бородин!!!

  • 2wordpress   07.06.2016

    Валерий, я ваши комментарии наблюдаю почти на всех блогах, которые я читаю. Уже прям надоели))))

  • Tod   07.06.2016

    2wordpress, продвижение через комментарии еще никто не не отменял, вы ведь тоже не используете имя в соответствующем поле, а пишете название сайта)) Главное чтобы не откровенный спам был, ссылки на блоги я оставляю.

  • Валерий   07.06.2016

    Не знаю, чем мои комментарии 2wordpress надоели? Но я все же посмотрел его блог и подписался на него, теперь буду и его комментировать. Если он конечно не против?! :)
    PS: Комментировать стараюсь по существу и ни кого не обижать. Так, что если вам не нравиться, то пишите об этом сразу. Спасибо!

  • Дмитрий   04.07.2017

    Здравствуйте. В данном посте используются не все фильтры. Еще нужно отключать подгрузку картинок с CDN. Надо бы добавить в пост. Сам плагин недавно обновился, в нем прописана функция.

    Remove emoji CDN hostname from DNS prefetching hints. Можно разобрать плагин и глянуть. Вот она

    /**
    * Remove emoji CDN hostname from DNS prefetching hints.
    *
    * @param array $urls URLs to print for resource hints.
    * @param string $relation_type The relation type the URLs are printed for.
    * @return array Difference betwen the two arrays.
    */
    function disable_emojis_remove_dns_prefetch( $urls, $relation_type ) {
    if ( 'dns-prefetch' == $relation_type ) {
    /** This filter is documented in wp-includes/formatting.php */
    $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.1/svg/' );

    $urls = array_diff( $urls, array( $emoji_svg_url ) );
    }

    return $urls;
    }

  • Tod   05.07.2017

    Дмитрий, спасибо за дополнение, после отпуска рассмотрю детальнее, потестирую и дополню статью.

  • Tod   09.07.2017

    Дмитрий, разобрался с этим DNS prefetching hints более детально. Оказывается в альтернативном варианте, на который я ссылался в статье, также появилось обновление кода, но там предлагается все сделать через фильтр emoji_svg_url. Этот метод покороче, но я лично его не тестировал. Что касается функции disable_emojis_remove_dns_prefetch, то ее мало просто добавить в шаблон, нужно будет еще создать фильтр для вызова.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Последние посты
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости