Как использовать иконки FontAwesome в редакторе TinyMCE?

1 июл. 2014 г., 14:46:48
Просмотры: 18.3K
Голосов: 7

Я пытаюсь добавить кнопку YouTube в редакторе TinyMCE.

Вот файл recent-posts.js, который находится в папке js темы.

(function() {
   tinymce.create('tinymce.plugins.buttons', {
      init : function(ed, url) {

         //для кнопки последних записей
         ed.addButton('recentposts', {
            title : 'Последние записи',
            image : url + '/youtube.png',
            onclick : function() {
               var posts = prompt("Количество записей", "");
               var text = prompt("Заголовок списка", "");

               if (text != null && text != ''){
                  if (posts != null && posts != '')
                     ed.execCommand('mceInsertContent', false, '[recent-posts posts="'+posts+'"]'+text+'[/recent-posts]');
                  else
                     ed.execCommand('mceInsertContent', false, '[recent-posts]'+text+'[/recent-posts]');
               }
               else{
                  if (posts != null && posts != '')
                     ed.execCommand('mceInsertContent', false, '[recent-posts posts="'+posts+'"]');
                  else
                     ed.execCommand('mceInsertContent', false, '[recent-posts]');
               }
            }
         });


         //для YouTube видео
          ed.addButton('youtube', {
            title : 'YouTube',
            text: 'YouTube',          
            onclick : function() {
               var id = prompt("ID видео", "");
               var text = prompt("Заголовок видео", "");

               if (text != null && text != ''){
                  if (id != null && id != '')
                     ed.execCommand('mceInsertContent', false, '[yt id="'+id+'"]'+text+'[/yt]');
               }
               else{
                  if (id != null && id != '')
                     ed.execCommand('mceInsertContent', false, '[yt posts="'+id+'"]');
               }
            }
         });

      },
      createControl : function(n, cm) {
         return null;
      },
      getInfo : function() {
         return {
            longname : "me The Most Brilliant",
            author : 'me',
            authorurl : 'http://www.google.com',
            infourl : 'http://www.google.com',
            version : "1.0"
         };
      }
   });
   tinymce.PluginManager.add('buttons', tinymce.plugins.buttons);
})();

Код в functions.php:

function register_button( $buttons ) {
   array_push( $buttons,"recentposts", "youtube" );
   return $buttons;
}

function add_plugin( $plugin_array ) {
   $plugin_array['buttons'] = get_template_directory_uri() . '/js/recent-posts.js';
   return $plugin_array;
}

function my_recent_posts_button() {

   if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
      return;
   }

   if ( get_user_option('rich_editing') == 'true' ) {
      add_filter( 'mce_external_plugins', 'add_plugin' );
      add_filter( 'mce_buttons', 'register_button' );
   }

}

add_action('init', 'my_recent_posts_button');

Вместо image : url+'/youtube.png' я пытаюсь использовать text :'<i class="fa fa-camera-retro"></i>'

Но в текстовом редакторе вместо иконки FontAwesome отображается просто текст как есть. Где нужно разместить файл FontAwesome и как его подключить для использования в TinyMCE?

0
Все ответы на вопрос 3
18

К сожалению, вы не сможете добавить иконку FontAwesome напрямую, передав её в метод ed.addButton();.

Однако можно попробовать обходной путь. Если вы опустите параметр image : url+'/youtube.png' в методе, то автоматически создастся пустой элемент <span> с классом mceIcon и ещё одним классом mce_[plugin_name].

Затем вы можете использовать CSS для стилизации этого элемента <span> по своему усмотрению.

Теперь вы можете использовать FontAwesome напрямую в вашем CSS, примерно так (убедитесь, что заменили класс-заполнитель .mce_[plugin_name] на ваш реальный класс):

span.mce_[plugin_name] {
    position: relative;
}

span.mce_[plugin_name]:before {
    content: "\f166"; /* Значение для иконки YouTube */
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    text-decoration: inherit;
/*--настройте по необходимости--*/
    color: #000;
    font-size: 18px;
    padding-right: 0.5em;
    position: absolute;
    top: 10px;
    left: 0;
}

ОБНОВЛЕНИЕ

Вот как я загружаю свой CSS-файл FontAwesome. Я адаптировал загрузку для админ-панели, что вам и нужно сделать. Я подключаю его через CDN Bootstrap, но вы можете скачать CSS-файл и загрузить его из папки вашей темы или плагина, используя ту же функцию admin_enqueue_scripts();.

// Загрузка Font Awesome
function royal_enqueue_awesome() {
    wp_enqueue_style( 'prefix-font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css', array(), '4.0.3' );
}

add_action( 'admin_enqueue_scripts', 'royal_enqueue_awesome' );
1 июл. 2014 г. 15:29:54
Комментарии

Я не использую плагин.

user1906399 user1906399
1 июл. 2014 г. 17:23:37

и иконка YouTube из FontAwesome добавляется с помощью <i class="fa fa-youtube"></i>. Как мне использовать это в CSS?

user1906399 user1906399
1 июл. 2014 г. 17:43:01

То, что вы делаете в вашем коде выше - это добавление собственного плагина TinyMCE - я не имею в виду использование плагина WordPress :-) Я предлагаю ознакомиться с этим руководством, чтобы получить хорошее представление о процессе, это может быть полезно :-)

Matt Royal Matt Royal
1 июл. 2014 г. 17:44:13

Элемент <i class="fa fa-youtube"></i> - это HTML-разметка, к которой по умолчанию применяются стили FontAwesome. Вы также можете применить эти стили к другим элементам с помощью CSS-псевдоселекторов, как я сделал в своем коде, если хотите.

Matt Royal Matt Royal
1 июл. 2014 г. 17:47:38

Я не получаю элемент span, если оставляю image:. Я могу получить доступ к кнопке по её ID (#mce_17), могу использовать хук admin_head и изменить, например, цвет фона. Я запутался, куда нужно поместить скачанную папку fontawesome и достаточно ли просто подключить её CSS-файл в functions.php? Дальше что делать? Вот весь код.

user1906399 user1906399
1 июл. 2014 г. 17:55:49

Да, вы можете использовать ID. Вам нужно использовать функцию wp_enqueue_style для добавления CSS-файла FontAwesome на ваш сайт, прежде чем вы сможете использовать CSS, который я предоставил вам ранее.

Matt Royal Matt Royal
1 июл. 2014 г. 18:06:05

Я не уверен, откуда вы взяли значение "\f1666", в документации FontAwesome на сайте об этом ничего не сказано.

user1906399 user1906399
1 июл. 2014 г. 18:12:47

Это не работает так, как вы сказали. Элемент <button role="presentation" type="button" tabindex="-1">YouTube</button>, всё, что мне нужно, это заменить YouTube на <i fa fa-youtube></i>

user1906399 user1906399
1 июл. 2014 г. 18:15:40

Значение "\f1666" — это UTF-8 код символа. Вы можете найти их в шпаргалке FontAwesome

Matt Royal Matt Royal
1 июл. 2014 г. 18:19:45

`function tinymce_style(){

?> <style> #mce_17{

      content: "\f166"; /* Значение для иконки Youtube */
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  text-decoration: inherit;

     }

</style>

<?php }

add_action('admin_head', 'tinymce_style');` я использую этот код

user1906399 user1906399
1 июл. 2014 г. 18:24:52

Какой элемент <div> оборачивает элемент <button>?

Matt Royal Matt Royal
1 июл. 2014 г. 18:24:55

`function thought_script(){

wp_enqueue_style('fontawesome-style', get_template_directory_uri().'/font-awesome/css/font-awesome.min.css');

}

add_action('wp_enqueue_scripts', 'thought_script');` и этот код для добавления CSS FontAwesome

user1906399 user1906399
1 июл. 2014 г. 18:27:02

Давайте продолжим это обсуждение в чате.

Matt Royal Matt Royal
1 июл. 2014 г. 18:28:35

<div id="mce_17" class="mce-widget mce-btn mce-last" tabindex="-1" aria-labelledby="mce_17" role="button" aria-label="YouTube"><button role="presentation" type="button" tabindex="-1"><i class="mce-ico mce-i-youtube"></i></button></div> вот что я получаю при инспектировании элемента в Google

user1906399 user1906399
1 июл. 2014 г. 18:29:08

мне нужно 20 очков репутации для чата

user1906399 user1906399
1 июл. 2014 г. 18:30:57

Попробуйте это, так как вы использовали неправильное действие и загружали FontAwesome на сайт, а не в админку, как нужно... function thought_script(){ wp_enqueue_style('fontawesome-style', get_template_directory_uri().'/font-awesome/css/font-awesome.min.css'); } add_action('admin_enqueue_scripts', 'thought_script');

Matt Royal Matt Royal
1 июл. 2014 г. 18:32:35

теперь я получаю <i class="mce-ico mce-i-youtube"></i> внутри элемента button, но это не работает.

user1906399 user1906399
1 июл. 2014 г. 18:39:42

Теперь я разобрался, это не span элемент, а i элемент, который появляется, если не указан текст или изображение. Так что мне просто нужно было обратиться к классу i.mce-i-youtube, который отличается, как вы упомянули. Я искал span элемент. Спасибо за помощь и время.

user1906399 user1906399
1 июл. 2014 г. 22:06:35
Показать остальные 13 комментариев
0

Я протестировал следующий метод на WordPress 4.6.1

Изначально я искал этот процесс, чтобы создать кнопку, которая будет генерировать шорткод. Основываясь на различных публикациях, я сначала использовал следующие параметры addButton в моем javascript-файле для оформления кнопки TINYMCE...

ed.addButton('wpse72394_button', { title: 'заголовок моей кнопки', cmd: 'wpse72394_inser', image: url + '/путь/к/изображению.png' });

...Но я не хотел создавать новую кнопку с нуля или просто текстовую метку. Вместо этого я хотел использовать существующую иконку в WordPress. Я обнаружил, что могу легко заменить параметр image: на параметр icon: вот так...

ed.addButton('wpse72394_button', { title: 'Вставить шорткод', cmd: 'wpse72394_insert_shortcode', icon: 'wp_code' });

В WordPress, если заглянуть в

path-to-site\wp-includes\js\tinymce\plugins\wordpress\plugins.js

можно найти различные варианты, такие как...

      wp_help
      wp_more
      wp_page
      wp_code

Я не думаю, что это иконки fontawesome, но они вполне подходят для моих целей без необходимости добавлять дополнительные css или ссылки на CDN.

31 окт. 2016 г. 18:27:31
1

Вот простое и эффективное решение для этого.

Сначала добавьте библиотеку FontAwesome в админку WordPress, создав и добавив её в admin_init

function fontawesome_dashboard() {
   wp_enqueue_style('fontawesome', 'https://use.fontawesome.com/releases/v5.1.1/css/all.css'); 
}

add_action('admin_head', 'fontawesome_dashboard', 11);

Затем в вашем JavaScript файле:

ed.addButton('recentposts', {
            title : 'Последние записи',
            icon: ' fa fa-camera-retro', // обратите внимание на пробел перед 'fa'

Такой хак сработал у меня. Уверен, что и у вас получится :)

19 июл. 2018 г. 17:12:47
Комментарии

Отлично работает (на WP 5.7.2 и FontAwesome 5.15.1). Только убедитесь, что обратили внимание на ПРОБЕЛ перед первым классом, LOL

revive revive
13 мая 2021 г. 20:13:31