Смайлы в WordPress

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

Немного теории. Система замены текстовых комбинаций на картинки в WordPress реализована следующим образом. Есть набор картинок, который расположен в папке /wp-includes/images/smilies/ (начиная со 2-й версии WordPress). И есть набор текстовых комбинаций, для которых задана соответствующая картинка. Данное соответствие задаётся в виде массива в файле /wp-includes/functions.php в функции smilies_init. Рассмотрим кратко работу этой функции. В функции происходит заполнение трёх глобальных массивов. Первый, и самый интересный – это массив $wpsmiliestrans. В нём собственно задаётся соответствие текстовых комбинаций картинкам. В качестве ключа массива выступает текстовая комбинация, в качестве значения имя файла без пути к нему. Самое главное, что перед заполнением массива, функция проверяет наличие уже заполненного массива с этим именем, и если такой массив уже существует, то заполнение не производится. Именно этот факт позволяет задавать своё соответствие текстовых комбинаций картинкам без правки кода самого WordPress. Далее на основании этого массива функция создает два производных массива – $wp_smiliessearch и $wp_smiliesreplace. В первом размещаются текстовые комбинации для поиска, а во втором HTML код соответствующих картинок. Причём при заполнении второго массива задаётся путь к файлу, изменить который можно только изменением кода самого WordPress, что делать не совсем желательно.

Мне представляются два пути улучшения системы смайлов в WordPress. Первый – это изменение набора картинок и расширение вариантов соответствующих им тестовых комбинаций. Второй – это упрощение ввода смайлов в текстовое поле комментариев. При этом я не касаюсь вопроса использования смайлов в статьях и на страницах, поскольку сам не пользуюсь, а в редакторе вставка и так реализована. Рассмотрим подробно возможные варианты решения.

Изменение набора картинок. Самый простой и очевидный вариант – это заменить картинки, которые идут с WordPress на что-нибудь по своему вкусу. Для тех, кто используется систему смайлов это надо сделать как минимум. Кроме этого можно задать свой собственный набор соответствий. Для этого надо заполнить массив $wpsmiliestrans теми значениями, которые нужны. Выглядеть это должно примерно так:

<?php
$wpsmiliestrans = array(
':-)' => 'new_icon_smile.gif',
':-(' => 'new_icon_sad.gif');
?>

Куда данный код вставить? Вот тут как раз не всё так очевидно, как хотелось бы. Реализовать в качестве плагина не получится, поскольку я не нашёл, как официальным способом запустить функции плагина до инициализации данных самим WordPress. Самый очевидный вариант при таком раскладе – это вставить заполнение массива в файл конфигурации wp-config.php до вызова require_once(ABSPATH.’wp-settings.php’);. Не самый лучший способ надо сказать, но на безрыбье и такой способ можно использовать. Я же сделал иначе. Я вставил данный код в файл functions.php используемой темы оформления. Данный файл вызывается до инициализации данных WordPress, что верно, по крайней мере, для версии 2.7. Да, при переходе к другой теме оформления, возвращаются стандартные настройки системы смайлов, зато не пришлось влезать в код WordPress и в файлы конфигурирования. Хотя вариант с добавлением кода в wp-config.php единственный возможный, если, скажем, на сайте присутствует система смены тем оформления посетителями.

Упрощение ввода смайлов в текстовое поле комментариев. На сайте WordPress я нашёл два плагина с данным функционалом. Один из них мне не удалось настроить, поэтому остаётся один – WP Grins. Отличный плагин, который добавляет панель со смайлами над текстовым полем. Причём такая панель появляется и в админке. У данного плагина есть один минус, который для кого-то может и не покажется существенным – для функционирования плагина скачивается файл размером 125 килобайт. Лично для меня это показалось существенным. Для себя я сделал панельку со смайлами в файле comments.php используемой мной темы оформления. Как это работает? Известно, в каком массиве находится таблица соответствия текстовых комбинаций картинкам, т.е. мы можем вывести картинки на страницу. Для каждой картинки можно задать вызов скрипта при нажатии, который добавляет в текстовое поле соответствующую текстовую комбинацию. Взяв за основу реализацию в плагине WP Grins, я сделал вот так:

<script type="text/javascript">
function addsmile($smile){
document.getElementById('comment').value=document.getElementById('comment').value+' '+$smile+' ';
}
</script>
<?php
global $wpsmiliestrans;
$dm_showsmiles = '';
$dm_smiled = array();
foreach ($wpsmiliestrans as $tag => $dm_smile) {
if (!in_array($dm_smile,$dm_smiled)) {
$dm_smiled[] = $dm_smile;
$tag = str_replace(' ', '', $tag);
$dm_showsmiles .= '<img src="'.get_bloginfo('wpurl').'/wp-includes/images/smilies/'.$dm_smile.'" alt="'.$tag.'" onclick="addsmile(\''.$tag.'\');"/> ';
}
}
echo '<div style="width:580px; margin-left:10px; margin-right:10px;">'.$dm_showsmiles.'</div>';
?>

Данный код я вставил непосредственно перед текстовым полем для ввода комментария. Получилось компактно и с минимальными накладными расходами на производительность и объём закачиваемых данных.

А напоследок предлагаю всем элегантное решение обоих вопросов, с которыми я столкнулся, разбирая систему смайлов в WordPress – это плагин Smilies Themer и дополнение к нему Smilies Themer Toolbar. Первый позволяет заменять стандартные смайлы. Причём в комплекте уже есть несколько симпатичных наборов. Второй выводит панель со смайлами. Если бы не моя нелюбовь к использованию большого количества плагинов, то я бы пользовался бы этими двумя.

Текстовые комбинации, встроенные в WordPress:
[:mrgreen:] [:neutral:] [:twisted:] [:arrow:] [:shock:] [:smile:] [:???:] [:cool:] [:evil:] [:grin:] [:idea:] [:oops:] [:razz:] [:roll:] [:wink:] [:cry:] [:eek:] [:lol:] [:mad:] [:sad:] [8-)] [8-O] [:-(] [:-)] [:-?] [:-D] [:-P] [:-o] [:-x] [:-|] [;-)] [8)] [8O] [:(] [:)] [:?] [:D] [:P] [:o] [:x] [:|] [;)] [:!:] [:?:]
Для того чтобы WordPress заменил текст картинкой, до и после текста должен стоять пробел.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.