Как использовать иконки FontAwesome в редакторе TinyMCE?
Я пытаюсь добавить кнопку 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?
К сожалению, вы не сможете добавить иконку 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' );

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

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

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

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

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

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

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

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

`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');` я использую этот код

`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

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

<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

Попробуйте это, так как вы использовали неправильное действие и загружали 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');

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

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

Я протестировал следующий метод на 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.

Вот простое и эффективное решение для этого.
Сначала добавьте библиотеку 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'
Такой хак сработал у меня. Уверен, что и у вас получится :)
