Создание новой кнопки в редакторе WordPress

Насколько известно в wordpress по умолчанию установлен простенький визуальный редактор, с возможностью просмотра текста и html кода. У него так же существует ряд хуков, которые позволяют добавлять новые кнопки на панель инструментов.
Давайте попробуем создать кнопку, которая будет добавлять в текст новый шорткод, а этот код будет заменяться нашей функцией на сайте.
Давайте предположим, что у нас есть номер телефона или Email в интернет магазине, есть множество записей или страниц где этот номер используется прямо в тексте. Если номер в магазине поменяется, то нужно будет его изменить во всех записях и страницах. Есть множество плагинов, с которыми нужно разбираться, можно использовать SQL запрос типа Replace, но не многим это доступно.
Создание кнопки
Для создания кнопки в редактор нет специальных хуков, но есть Javascript фнукция «QTags.addButton» , которая добавляет новые элементы на панель управления.
QTags.addButton( 'Id кнопки', 'Название кнопки', 'Открывающийся тег', 'Закрывающий тэг','id','Title','Позиция');
Мы создадим кнопку с название «Тел», и её ID — «phone», в данном случаем нам нет необходимости закрывать тэг, так как мы будет добавлять в текст шорткод типа «Номер телефона«.
<script type="text/javascript"> QTags.addButton( 'phone', 'Тел','Номер телефона','','tel','Добавить телефон',1); </script>
Теперь данный код необходимо подключить либо в футере, либо в header административной панели, для это задачи есть хук «admin_print_footer_scripts«.
Открываем файл function.php вашей темы, и добавляем в него следующий код:
add_action('admin_print_footer_scripts','add_new_button'); function add_new_button(){ ?> <script type="text/javascript"> QTags.addButton( 'phone', 'Тел','Номер телефона','','tel','Добавить телефон',1); </script> <?php }
В редакторе на вкладе «Текст» появится новая кнопка, а при нажатие на неё в текстовое поле будет добавлен шорткод «Номер телефона«.
Создание шорткода
Теперь данный шорткод нужно заменить на какой-нибудь текст, в данном случае это будет телефон компании. Для создания шорткода служит функция «add_shortcode».В файл function.php добавляем следующий код:
add_shortcode('phone','add_phone'); function add_phone(){ return 'Номер телефона';//Номер телефона компании }
Шорткод Номер телефона будет заменён на номер телефон указанный внутри функции.
Давайте добавим несколько кнопок, например Телефон,Email, Icq, и Название вашего блога.
add_action('admin_print_footer_scripts','add_new_button'); function add_new_button(){ ?> <script type="text/javascript"> QTags.addButton( 'phone', 'Тел','Номер телефона','','tel','Добавить телефон',1); QTags.addButton( 'email', 'Email','Email','','email','Добавить Email',1); QTags.addButton( 'icq', 'Icq','Номер Icq','','icq','Добавить Icq',1); QTags.addButton( 'blog_name', 'Blog Name','Услуги программиста','','blog_name','Добавить Название Сайта',1); </script> <?php } add_shortcode('phone','add_phone'); function add_phone(){return 'Номер телефона';} add_shortcode('email','add_email'); function add_email(){return 'Email';} add_shortcode('icq','add_icq'); function add_icq(){return 'Номер Icq';} add_shortcode('blog_name','add_blog_name'); function add_blog_name(){return get_option('blogname');}
В итоге появится 4 кнопки, а на сайте шорткоды будут заменены на указанные данные внутри функции.
Обратите внимание на последнюю функцию «add_blog_name«, внутри я подключил стандартную функцию Wp, которая берёт название сайта из его общих настроек.
Какие есть ещё варианты
Создать отдельную опцию в общих настройках, и подтягивать телефон из базы данных.
С помощью хука «the_content» заменять шорткод Номер телефона на номер телефона, например вот так:
add_action('the_content','replace_phone'); function replace_phone($content){ return str_replace('Номер телефона','Номер телефона',$content); }
Если в тексте нужно заменить старый телефон на новый , то вот так:
add_action('the_content','replace_phone'); function replace_phone($content){ return str_replace('Старый телефон','Новый телефон',$content); }
Замена текста SQl запросом
Если же нет необходимости в создание php кода, нет желания читать данную статью, а номер в записях, всё же нужно поменять, то заходим в PhpMyAmin и выполняем следующий запрос!
select * from `wp_posts` post_content=REPLACE(`post_content`,'Старый телефон','Новый телефон');