Как добавить кнопку шорткода в редактор TinyMCE?

13 нояб. 2012 г., 05:21:28
Просмотры: 66.2K
Голосов: 39

Как добавить значок плагина в запись WordPress? Код, который я хочу вставить в плагин, должен появиться на панели записи [wp-admin/post.php].

Как на этом изображении:

Пример кнопки шорткода в редакторе TinyMCE

Результат: При нажатии на значок он автоматически вставляет [plugin] в содержимое записи, как показано здесь:

Результат вставки шорткода в редактор

2
Комментарии

Добавьте скриншот желаемого результата. Не совсем понятно, что вы хотите получить.

fuxia fuxia
13 нояб. 2012 г. 06:13:22

Я полагаю, вы хотите создать плагин, который добавляет кнопку TinyMCE в редактор для вставки шорткода WordPress, верно?

developdaly developdaly
13 нояб. 2012 г. 06:40:19
Все ответы на вопрос 2
3
73

Чтобы добавить нашу кнопку в редактор TinyMCE, необходимо выполнить несколько действий:

  1. Добавить нашу кнопку на панель инструментов
  2. Зарегистрировать плагин TinyMCE
  3. Создать этот плагин TinyMCE, который будет указывать TinyMCE, что делать при нажатии нашей кнопки.

Шаги №1 и №2

На этих шагах мы регистрируем наш плагин TinyMCE, который будет находиться в файле JavaScript по пути 'path/to/shortcode.js' (см. функцию wpse72394_register_tinymce_plugin() ниже)

 // Инициализация процесса регистрации нашей кнопки
 add_action('init', 'wpse72394_shortcode_button_init');
 function wpse72394_shortcode_button_init() {

      // Прерываем выполнение, если пользователь никогда не увидит TinyMCE
      if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') && get_user_option('rich_editing') == 'true')
           return;

      // Добавляем callback для регистрации нашего плагина TinyMCE   
      add_filter("mce_external_plugins", "wpse72394_register_tinymce_plugin"); 

      // Добавляем callback для добавления нашей кнопки на панель инструментов TinyMCE
      add_filter('mce_buttons', 'wpse72394_add_tinymce_button');
}


// Этот callback регистрирует наш плагин
function wpse72394_register_tinymce_plugin($plugin_array) {
    $plugin_array['wpse72394_button'] = 'path/to/shortcode.js';
    return $plugin_array;
}

// Этот callback добавляет нашу кнопку на панель инструментов
function wpse72394_add_tinymce_button($buttons) {
            // Добавляем ID кнопки в массив $buttons
    $buttons[] = "wpse72394_button";
    return $buttons;
}

Шаг №3

Теперь нам нужно создать плагин TinyMCE. Он будет находиться в файле 'path/to/shortcode.js' (как указано в предыдущих шагах).

jQuery(document).ready(function($) {

    tinymce.create('tinymce.plugins.wpse72394_plugin', {
        init : function(ed, url) {
                // Регистрируем команду, которая выполняется при нажатии кнопки
                ed.addCommand('wpse72394_insert_shortcode', function() {
                    selected = tinyMCE.activeEditor.selection.getContent();

                    if( selected ){
                        // Если текст выделен при нажатии кнопки
                        // Оборачиваем его в шорткод.
                        content =  '[shortcode]'+selected+'[/shortcode]';
                    }else{
                        content =  '[shortcode]';
                    }

                    tinymce.execCommand('mceInsertContent', false, content);
                });

            // Регистрируем кнопки - при нажатии выполняется команда выше
            ed.addButton('wpse72394_button', {title : 'Вставить шорткод', cmd : 'wpse72394_insert_shortcode', image: url + '/path/to/image.png' });
        },   
    });

    // Регистрируем наш плагин TinyMCE
    // Первый параметр - ID кнопки
    // Второй параметр должен совпадать с первым параметром функции tinymce.create() выше
    tinymce.PluginManager.add('wpse72394_button', tinymce.plugins.wpse72394_plugin);
});
13 нояб. 2012 г. 19:24:42
Комментарии

На шаге 1, замена хука init на хук admin_init также может немного сократить обработку на фронтенде.

Tim Malone Tim Malone
16 нояб. 2016 г. 04:01:48

Зависит от ситуации, TinyMCE может использоваться и на фронтенде. Но если речь идет только об админке, то admin_init будет предпочтительнее.

Stephen Harris Stephen Harris
17 нояб. 2016 г. 12:19:52

Таким образом, shortcode.js должен быть размещен здесь wp-includes/js/tinymce/js/shortcode.js, а также у кнопки нет иконки

Jadeye Jadeye
8 авг. 2020 г. 23:03:11
1

Здесь слишком много информации, чтобы разместить полный ответ, поэтому ознакомьтесь с этим руководством: http://wp.smashingmagazine.com/2012/05/01/wordpress-shortcodes-complete-guide/

Вам необходимо создать файл Javascript, который будет обрабатывать действие кнопки, зарегистрированной через WordPress, и вставлять кнопку TinyMCE в редактор.

13 нояб. 2012 г. 06:44:41
Комментарии

Использует query_posts, поэтому, возможно, это не лучший пример для ссылки.

Brad Dalton Brad Dalton
11 июл. 2014 г. 17:27:42