¿Cómo usar iconos de FontAwesome en el editor TinyMCE?
Estoy intentando agregar un botón de YouTube en el editor TinyMCE.
Aquí está el archivo recent-posts.js que está en la carpeta js del directorio del tema.
(function() {
tinymce.create('tinymce.plugins.buttons', {
init : function(ed, url) {
//para el botón de posts recientes
ed.addButton('recentposts', {
title : 'Posts recientes',
image : url + '/youtube.png',
onclick : function() {
var posts = prompt("Número de posts", "");
var text = prompt("Encabezado de la lista", "");
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]');
}
}
});
//para video de YouTube
ed.addButton('youtube', {
title : 'YouTube',
text: 'YouTube',
onclick : function() {
var id = prompt("ID del video", "");
var text = prompt("Encabezado del video", "");
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);
})();
El código en functions.php es:
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');
En lugar de image : url+'/youtube.png'
estoy intentando usar text :'<i class="fa fa-camera-retro"></i>'
Pero en el editor de texto, en vez de mostrar el icono de FontAwesome, solo aparece como texto literal. ¿Dónde debería colocar el archivo de FontAwesome y cómo debería llamarlo para usarlo en TinyMCE?
No podrías añadir un icono de FontAwesome pasándolo directamente al método ed.addButton();
lamentablemente.
Sin embargo, puedes intentar una solución alternativa. Si omites el parámetro image : url+'/youtube.png'
del método, automáticamente creará un <span>
vacío con la clase mceIcon
y otra clase mce_[plugin_name]
.
Luego puedes usar CSS para dar estilo a ese elemento <span>
como prefieras.
Ahora puedes usar FontAwesome directamente en tu CSS, algo así (asegúrate de cambiar la clase .mce_[plugin_name]
utilizada aquí por tu clase real):
span.mce_[plugin_name] {
position: relative;
}
span.mce_[plugin_name]:before {
content: "\f166"; /* Valor para el icono de Youtube*/
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
text-decoration: inherit;
/*--ajusta según sea necesario--*/
color: #000;
font-size: 18px;
padding-right: 0.5em;
position: absolute;
top: 10px;
left: 0;
}
ACTUALIZACIÓN
Aquí está cómo cargo mi archivo CSS de FontAwesome. Lo he adaptado para cargar en el área de administración para lo que necesitas hacer. Lo llamo desde el CDN de Bootstrap, pero podrías descargar el archivo CSS y cargarlo desde tu carpeta de tema o plugin usando la misma función admin_enqueue_scripts();
.
// Cargar 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' );

y el icono de YouTube de FontAwesome viene usando <i class="fa fa-youtube"></i>
. ¿Cómo uso esto en CSS?

Lo que estás haciendo en tu código anterior es agregar tu propio plugin de TinyMCE - no me refiero a usar un plugin de WordPress :-) Te sugiero que revises este tutorial para obtener una buena visión general del proceso también, podría ser útil :-)

El <i class="fa fa-youtube"></i>
es el marcado HTML al que se aplica el CSS de FontAwesome por defecto. También puedes aplicarlo a otros elementos usando Selectores Pseudo CSS como lo he hecho en mi código si así lo deseas.

No obtengo ningún elemento span si dejo image:
. Puedo acceder al botón usando su ID que es #mce_17, y puedo usar el hook admin_head, y puedo cambiar su color de fondo, etc. Estoy confundido sobre dónde debería poner la carpeta de fontawesome que descargué y ¿debería simplemente llamar a su archivo css en functions.php? después de eso, ¿qué debería hacer? Déjame poner todo el código.

Sí, también puedes usar el ID. Necesitas usar la función wp_enqueue_style
para agregar el archivo CSS de FontAwesome a tu sitio web antes de poder llamar al CSS que te proporcioné anteriormente.

No estoy seguro de dónde estás obteniendo ese valor "\f1666", no hay documentación al respecto en el sitio web de FontAwesome

No está funcionando de la manera que dijiste, el elemento es <button role="presentation" type="button" tabindex="-1">YouTube</button>
, todo lo que necesito hacer es reemplazar YouTube con <i fa fa-youtube></i>

El valor "\f1666" es el código de caracteres UTF-8. Puedes consultarlos en la Hoja de referencia de FontAwesome

`function tinymce_style(){
?> <style> #mce_17{
content: "\f166"; /* Valor para el ícono de YouTube */
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
text-decoration: inherit;
}
</style>
<?php }
add_action('admin_head', 'tinymce_style');` estoy usando esto

`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');` y esto para añadir el CSS de FontAwesome

Continuemos esta discusión en el chat.

<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>
esto es lo que obtengo del elemento de inspección de Google

Prueba esto ya que estabas usando la acción incorrecta y cargando FontAwesome en el sitio web y no en el Dashboard como necesitas... 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');

ahora obtengo <i class="mce-ico mce-i-youtube"></i>
dentro del elemento button, pero no está funcionando.

Probé lo siguiente en WordPress 4.6.1
Originalmente investigué este proceso para ayudar a crear un botón que generara un shortcode. Basado en varios posts, inicialmente usé los siguientes parámetros addButton dentro de mi archivo javascript para decorar mi botón de TINYMCE...
ed.addButton('wpse72394_button', { title: 'título de mi botón', cmd: 'wpse72394_inser', image: url + '/ruta/a/la/imagen.png' });
...Pero no quería crear un botón desde cero o solo una etiqueta de texto. En lugar de eso, quería hacer referencia a un icono existente en WordPress. Descubrí que podía fácilmente reemplazar el parámetro image: por un parámetro icon: así...
ed.addButton('wpse72394_button', { title: 'Insertar shortcode', cmd: 'wpse72394_insert_shortcode', icon: 'wp_code' });
Dentro de WordPress, si buscas en
ruta-del-sitio\wp-includes\js\tinymce\plugins\wordpress\plugins.js
encontrarás varias opciones como...
wp_help
wp_more
wp_page
wp_code
No creo que estos sean iconos de fontawesome, pero son lo suficientemente cercanos para mí para hacer el trabajo sin agregar css adicional o referencias a enlaces CDN.

Aquí hay una solución muy sencilla para esto.
Primero, agrega la biblioteca FontAwesome al backend de WordPress creando y añadiéndola a 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);
Luego, en tu archivo javascript:
ed.addButton('recentposts', {
title : 'Publicaciones recientes',
icon: ' fa fa-camera-retro', // nota el espacio antes de 'fa'
Este tipo de truco funcionó para mí. Estoy seguro de que también funcionará para ti :)
