Come usare le icone Font Awesome nell'editor TinyMce
Sto cercando di aggiungere un pulsante YouTube nell'editor TinyMce.
Ecco un file recent-posts.js che si trova nella cartella js della directory del tema.
(function() {
tinymce.create('tinymce.plugins.buttons', {
init : function(ed, url) {
//per il pulsante post recenti
ed.addButton('recentposts', {
title : 'Post recenti',
image : url + '/youtube.png',
onclick : function() {
var posts = prompt("Numero di post", "");
var text = prompt("Intestazione elenco", "");
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]');
}
}
});
//per video YouTube
ed.addButton('youtube', {
title : 'YouTube',
text: 'YouTube',
onclick : function() {
var id = prompt("ID video", "");
var text = prompt("Intestazione 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);
})();
codice in 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');
Al posto di image : url+'/youtube.png'
sto provando a usare text :'<i class="fa fa-camera-retro"></i>'
Ma nell'editor di testo invece dell'icona Font Awesome, viene visualizzato come testo così com'è. Dove dovrei posizionare il file Font Awesome e come dovrei chiamarlo e come usarlo in TinyMce?
Non è possibile aggiungere un'icona FontAwesome passandola direttamente al metodo ed.addButton();
purtroppo.
Puoi però provare una soluzione alternativa. Se ometti il parametro image : url+'/youtube.png'
dal metodo, verrà automaticamente creato un <span>
vuoto con la classe mceIcon
e un'altra classe mce_[plugin_name]
.
Puoi quindi usare CSS per stilizzare quell'elemento <span>
come preferisci.
Ora puoi usare FontAwesome direttamente nel tuo CSS, qualcosa come questo (assicurati di cambiare il segnaposto .mce_[plugin_name]
usato qui con la tua classe effettiva):
span.mce_[plugin_name] {
position: relative;
}
span.mce_[plugin_name]:before {
content: "\f166"; /* Valore per l'icona Youtube */
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
text-decoration: inherit;
/*--regola secondo necessità--*/
color: #000;
font-size: 18px;
padding-right: 0.5em;
position: absolute;
top: 10px;
left: 0;
}
AGGIORNAMENTO
Ecco come carico il mio file CSS di FontAwesome. Ho adattato il codice per l'area di amministrazione, che è ciò che ti serve fare. Lo carico dal CDN di Bootstrap, ma potresti scaricare il file CSS e caricarlo dalla cartella del tuo tema o plugin usando la stessa funzione admin_enqueue_scripts();
.
// Carica 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' );

e l'icona YouTube di fontawesome viene utilizzata con <i class="fa fa-youtube"></i>
. Come posso usarla nel CSS?

Quello che stai facendo nel tuo codice sopra è aggiungere il tuo plugin TinyMCE personalizzato - non mi riferisco all'uso di un plugin WordPress :-) Ti suggerisco di dare un'occhiata a questo tutorial per avere una buona panoramica del processo, potrebbe essere utile :-)

Il codice <i class="fa fa-youtube"></i>
è il markup HTML a cui viene applicato il CSS di FontAwesome di default. Puoi applicarlo anche ad altri elementi utilizzando i Pseudo Selettori CSS come ho fatto nel mio codice, se lo desideri.

Non ottengo alcun elemento span se lascio image:
. Posso accedere al pulsante usando il suo ID che è #mce_17, e posso usare l'hook admin_head, e posso cambiarne il colore di sfondo ecc. Sono confuso su dove dovrei mettere la cartella di FontAwesome che ho scaricato e dovrei semplicemente richiamare il suo file css in functions.php? dopo questo cosa dovrei fare? lascia che inserisca l'intero codice.

Sì, puoi usare anche l'ID. Devi usare la funzione wp_enqueue_style
per aggiungere il file CSS di FontAwesome al tuo sito web prima di poter richiamare il CSS che ti ho fornito precedentemente.

non sono sicuro da dove stai ottenendo quel valore "\f1666", non c'è documentazione a riguardo sul sito di fontawesome

non funziona nel modo che hai detto, l'elemento è <button role="presentation" type="button" tabindex="-1">YouTube</button>
, tutto ciò che devo fare è sostituire YouTube con <i fa fa-youtube></i>

Il valore "\f1666" è il codice carattere UTF-8. Puoi far riferimento a questi sul FontAwesome Cheatsheet

`function tinymce_style(){
?> <style> #mce_17{
content: "\f166"; /* Valore per l'icona di YouTube */
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
text-decoration: inherit;
}
</style>
<?php }
add_action('admin_head', 'tinymce_style');` sto usando questo

`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');` e questo per aggiungere il CSS di FontAwesome

Continuiamo questa discussione in 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>
questo è quello che ottengo da google inspect element

Prova questo, visto che stavi usando l'azione sbagliata e caricando FontAwesome nel sito invece che nella Dashboard come invece serve... 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');

ora ottengo <i class="mce-ico mce-i-youtube"></i>
all'interno dell'elemento button, ma non funziona.

Ora ho capito, non è un elemento span ma un elemento i che viene mostrato quando non è specificato del testo o un'immagine. Quindi mi bastava puntare alla classe i.mce-i-youtube, che è diversa come hai detto. Stavo cercando un elemento span. Grazie per il tuo aiuto e il tuo tempo.

Ho testato quanto segue su WordPress 4.6.1
Inizialmente ho cercato questo processo per creare un pulsante che generasse uno shortcode. Basandomi su alcuni post vari, ho utilizzato originariamente i seguenti parametri addButton all'interno del mio file javascript per decorare il pulsante TINYMCE...
ed.addButton('wpse72394_button', { title: 'titolo del mio pulsante', cmd: 'wpse72394_inser', image: url + '/percorso/immagine.png' });
...Ma non volevo creare un nuovo pulsante da zero o usare solo un'etichetta di testo. Volevo invece fare riferimento a un'icona esistente in WordPress. Ho scoperto che potevo facilmente sostituire il parametro image: con un parametro icon: in questo modo...
ed.addButton('wpse72394_button', { title: 'Inserisci shortcode', cmd: 'wpse72394_insert_shortcode', icon: 'wp_code' });
All'interno di WordPress, se guardi in
percorso-del-sito\wp-includes\js\tinymce\plugins\wordpress\plugins.js
scoprirai varie opzioni come...
wp_help
wp_more
wp_page
wp_code
Non credo che queste siano icone di fontawesome, ma sono abbastanza simili per me per portare a termine il lavoro senza dover aggiungere ulteriori riferimenti a css o link CDN.

Ecco una soluzione estremamente semplice per questo problema.
Per prima cosa, aggiungi la libreria FontAwesome al backend di WordPress creando e aggiungendola 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);
Poi nel tuo file javascript:
ed.addButton('recentposts', {
title : 'Post recenti',
icon: ' fa fa-camera-retro', // nota lo spazio prima di 'fa'
Questo tipo di hack ha funzionato per me. Sono sicuro che funzionerà anche per te :)
