Добавление кнопок Quicktag в HTML-редактор WordPress
Пытаюсь разобраться, как модифицировать HTML-редактор в WordPress; на изображении ниже вы можете увидеть скриншот редактора и кнопки в верхней части. Можно ли добавить новые кнопки? Я хочу добавить кнопку, которая будет вставлять теги "" и некоторые пользовательские шорткоды. Я знаю, что это возможно, но знает ли кто-то, как это сделать?

Если всё становится слишком сложным, вы можете просто добавить новые кнопки с помощью jQuery. Просто клонируйте существующую или создайте новую кнопку и добавьте её на панель инструментов редактора. Вы можете обернуть JavaScript в PHP-функцию и запустить её в подвале админки или где-то ещё.
Или можно использовать функцию edButton. Вот быстрый и грязный пример добавления кнопок для тегов p и pre.
// Добавляем кнопки в HTML-редактор
add_action('admin_print_footer_scripts','eg_quicktags');
function eg_quicktags() {
?>
<script type="text/javascript" charset="utf-8">
buttonA = edButtons.length;
edButtons[edButtons.length] = new edButton('ed_paragraph','p','<p>','</p><br />','p');
buttonB = edButtons.length;
edButtons[edButtons.length] = new edButton('ed_pre','pre','<pre lang="php">','</pre>','r');
jQuery(document).ready(function($){
jQuery("#ed_toolbar").append('<input type="button" value="p" id="ed_paragraph" class="ed_button" onclick="edInsertTag(edCanvas, buttonA);" title="p" />');
jQuery("#ed_toolbar").append('<input type="button" value="pre" id="ed_pre" class="ed_button" onclick="edInsertTag(edCanvas, buttonB);" title="pre" />');
});
</script>
<?php
}
ПРАВКА: В WordPress 3.3 (и выше) способ добавления quicktags изменился. Однако ленивое решение с edButton всё ещё работает, но некоторые плагины могут его отменить.
Новый и правильный способ добавления кнопок в HTML-редактор выглядит так:
// Добавляем кнопки в HTML-редактор
add_action('admin_print_footer_scripts','eg_quicktags');
function eg_quicktags() {
?>
<script type="text/javascript" charset="utf-8">
/* Добавление кнопок Quicktag в редактор WordPress версии 3.3 и выше
* - HTML ID кнопки (обязательно)
* - Отображаемое значение кнопки, атрибут value="" (обязательно)
* - Открывающий тег (обязательно)
* - Закрывающий тег (обязательно)
* - Горячая клавиша, атрибут accesskey="" (опционально)
* - Заголовок, атрибут title="" (опционально)
* - Приоритет/позиция на панели, 1-9 = первая, 11-19 = вторая, 21-29 = третья и т.д. (опционально)
*/
QTags.addButton( 'eg_paragraph', 'p', '<p>', '</p>', 'p' );
QTags.addButton( 'eg_pre', 'pre','<pre lang="php">', '</pre>', 'q' );
</script>
<?php
}
Не знаю, добавлен ли QTags в WordPress Codex, поэтому я указал необходимые параметры в комментариях к коду.

Я влюбился в упомянутый выше плагин для добавления этих пользовательских кнопок. После просмотра исходного кода я понял, что плагин работает так же, как и ваш код здесь. Теперь я люблю его еще больше, спасибо вам огромное! ОБЯЗАТЕЛЬНО ДОЛЖЕН БЫТЬ в файле функций любой WordPress-темы!

Новая версия WordPress 3.3 сломала эту функциональность, как и все плагины, которые это реализуют. Если вам удастся найти другой способ, буду очень признателен за обновление, если у вас будет возможность.

Старое решение с edbutton работает в 3.4-alpha. Просто хочу сообщить, что этот код все еще там. Но возможно он устарел, поэтому лучше использовать решение с QTags.

Смотрите следующее в wp-includes/js/quicktags.dev.js
/**
* Основная API-функция для добавления кнопки в Quicktags
*
* Добавляет qt.Button или qt.TagButton в зависимости от аргументов. Первые три аргумента всегда обязательны.
* Чтобы добавить кнопку(и) в Quicktags, ваш скрипт должен быть добавлен в очередь с зависимостью
* от "quicktags" и выведен в подвале. Если вы выводите JS напрямую из PHP,
* используйте add_action( 'admin_print_footer_scripts', 'output_my_js', 100 ) или add_action( 'wp_footer', 'output_my_js', 100 )
*
* Минимально необходимый код для добавления кнопки, вызывающей внешнюю функцию:
* QTags.addButton( 'my_id', 'моя кнопка', my_callback );
* function my_callback() { alert('ура!'); }
*
* Минимально необходимый код для добавления кнопки, вставляющей тег:
* QTags.addButton( 'my_id', 'моя кнопка', '<span>', '</span>' );
* QTags.addButton( 'my_id2', 'моя кнопка', '<br />' );
*
* @param id string обязательный HTML ID кнопки
* @param display string обязательный Значение кнопки value="..."
* @param arg1 string || function обязательный Либо начальный тег для вставки, например "<span>", либо функция обратного вызова, выполняемая при клике на кнопку.
* @param arg2 string необязательный Конечный тег, например "</span>"
* @param access_key string необязательный Клавиша доступа для кнопки.
* @param title string необязательный Атрибут title="..." кнопки
* @param priority int необязательный Число, определяющее желаемую позицию кнопки на панели инструментов. 1 - 9 = первая, 11 - 19 = вторая, 21 - 29 = третья и т.д.
* @param instance string необязательный Ограничивает кнопку определенным экземпляром Quicktags, добавляется во все экземпляры, если не указан.
* @return mixed null или объект кнопки, необходимый для обратной совместимости.
*/
qt.addButton = function( id, display, arg1, arg2, access_key, title, priority, instance ) {

Это также может быть полезно для некоторых...
http://scribu.net/wordpress/right-way-to-add-custom-quicktags.html

Скачайте и установите плагин HTML Editor Reloaded, перейдите на страницу настроек, где вы сможете добавить свои собственные кнопки.

Плагин сейчас не работает. Я немного погуглил и нашел это: http://wordpress.org/extend/plugins/post-editor-buttons-fork/. Надеюсь, это поможет.

@its_me α Я только что понял, что все похожие плагины не работают с новой версией WP, даже Fork у меня не работает

@jasondavis но плагин fork работал безупречно для меня. Ты ищешь кнопку во вкладке HTML-редактора? (Кнопка не отображается во вкладке визуального редактора!)

Я использую только вкладку HTML, но нашел лучшее решение, я добавлю его в свой новый вопрос здесь http://wordpress.stackexchange.com/questions/37849/add-custom-shortcode-button-to-editor

Также можно использовать плагин http://wordpress.org/extend/plugins/addquicktag/, он работает с пользовательскими типами записей и разными видами для визуального, HTML-режима и типа записи.

Вот мой пример добавления кнопок & & в текстовый редактор WordPress
Добавьте этот код в functions.php и сохраните файл, затем проверьте текстовый редактор
Надеюсь, это поможет вам ^^
/*-----------------------------------------------*/
/* Добавление кнопок в текстовый редактор
/*-----------------------------------------------*/
function urban_add_quicktags() {
//проверяем, используется ли скрипт 'quicktags', чтобы избежать ошибок
if (wp_script_is('quicktags')){
?>
<script type="text/javascript">
QTags.addButton( 'h4-subheader', 'SubHeader4', '<h4>', '</h4>', '4', 'Подзаголовок', 1 );
QTags.addButton( 'h3-subheader', 'SubHeader3', '<h3>', '</h3>', '3', 'Подзаголовок', 2 );
QTags.addButton( 'bold', '<b>', '<b>', '</b>', '3', 'Абзац', 3 );
</script>
<?php
}
}
//Выводим в подвале админки
add_action( 'admin_print_footer_scripts', 'urban_add_quicktags' );

Вам необходимо использовать API TinyMCE для добавления кнопок в редактор http://codex.wordpress.org/TinyMCE_Custom_Buttons

РЕДАКТИРОВАТЬ
Ой, подождите: вы используете HTML-редактор. Приведённый ниже фильтр предназначен для добавления кнопок в Визуальный редактор.
Почти все найденные мной инструкции рекомендуют редактировать файл quicktags.js
(и именно так я делал раньше), но я не рекомендую изменять файлы ядра. Я нашёл этот (совершенно непроверенный) плагин, который якобы позволяет изменять/добавлять кнопки быстрой разметки в HTML-редакторе.
ИСХОДНЫЙ ОТВЕТ
Вы можете добавлять кнопки в Ряд 1, Ряд 2 или Ряд 3.
Вот пример добавления кнопок в Ряд 3:
function mytheme_mce_buttons_row_3( $buttons ) {
$buttons[] = 'fontselect';
$buttons[] = 'fontsizeselect';
$buttons[] = 'code';
$buttons[] = 'sup';
$buttons[] = 'sub';
$buttons[] = 'backcolor';
$buttons[] = 'separator';
$buttons[] = 'hr';
$buttons[] = 'wp_page';
return $buttons;
}
add_filter( 'mce_buttons_3', 'mytheme_mce_buttons_row_3' );
Очевидно, что для добавления кнопок в Ряд 1 следует использовать 'mce_buttons_1'
, а для Ряда 2 — 'mce_buttons_2'
.
Если вы хотите добавить свою собственную, произвольную кнопку, вам нужно передать разметку кнопки в массив, а не просто имя HTML-тега.
