Come usare le icone Font Awesome nell'editor TinyMce

1 lug 2014, 14:46:48
Visualizzazioni: 18.3K
Voti: 7

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?

0
Tutte le risposte alla domanda 3
18

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' );
1 lug 2014 15:29:54
Commenti

Non sto utilizzando un plugin.

user1906399 user1906399
1 lug 2014 17:23:37

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

user1906399 user1906399
1 lug 2014 17:43:01

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 :-)

Matt Royal Matt Royal
1 lug 2014 17:44:13

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.

Matt Royal Matt Royal
1 lug 2014 17:47:38

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.

user1906399 user1906399
1 lug 2014 17:55:49

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.

Matt Royal Matt Royal
1 lug 2014 18:06:05

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

user1906399 user1906399
1 lug 2014 18:12:47

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>

user1906399 user1906399
1 lug 2014 18:15:40

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

Matt Royal Matt Royal
1 lug 2014 18:19:45

`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

user1906399 user1906399
1 lug 2014 18:24:52

Qual è l'elemento <div> che avvolge l'elemento <button>?

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

user1906399 user1906399
1 lug 2014 18:27:02

Continuiamo questa discussione in chat.

Matt Royal Matt Royal
1 lug 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> questo è quello che ottengo da google inspect element

user1906399 user1906399
1 lug 2014 18:29:08

ho bisogno di 20 reputazione per chattare

user1906399 user1906399
1 lug 2014 18:30:57

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');

Matt Royal Matt Royal
1 lug 2014 18:32:35

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

user1906399 user1906399
1 lug 2014 18:39:42

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.

user1906399 user1906399
1 lug 2014 22:06:35
Mostra i restanti 13 commenti
0

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.

31 ott 2016 18:27:31
1

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 :)

19 lug 2018 17:12:47
Commenti

Funziona alla grande (sto usando WP 5.7.2 e FontAwesome 5.15.1). Assicurati solo di fare attenzione allo SPAZIO prima della prima classe LOL

revive revive
13 mag 2021 20:13:31