Cum să folosesc pictograme FontAwesome în editorul TinyMCE?

1 iul. 2014, 14:46:48
Vizualizări: 18.3K
Voturi: 7

Încerc să adaug un buton YouTube în editorul TinyMCE.

Iată fișierul recent-posts.js care se află în folderul js al directorului temei.

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

         //pentru butonul postări recente
         ed.addButton('recentposts', {
            title : 'Postări recente',
            image : url + '/youtube.png',
            onclick : function() {
               var posts = prompt("Număr de postări", "");
               var text = prompt("Titlu listă", "");

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


         //pentru video YouTube
          ed.addButton('youtube', {
            title : 'YouTube',
            text: 'YouTube',          
            onclick : function() {
               var id = prompt("ID video", "");
               var text = prompt("Titlu 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 : "eu Cel Mai Strălucit",
            author : 'eu',
            authorurl : 'http://www.google.com',
            infourl : 'http://www.google.com',
            version : "1.0"
         };
      }
   });
   tinymce.PluginManager.add('buttons', tinymce.plugins.buttons);
})();

Codul din functions.php este

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

În loc de image : url+'/youtube.png' încerc să folosesc text :'<i class="fa fa-camera-retro"></i>'

Dar în editorul de text, în loc de pictogramă FontAwesome, afișează doar textul așa cum este. Unde ar trebui să plasez fișierul FontAwesome și cum să-l încarc și să-l folosesc în TinyMCE?

0
Toate răspunsurile la întrebare 3
18

Nu ai putea adăuga o pictogramă FontAwesome prin transmiterea directă către metoda ed.addButton();, din păcate.

Poți încerca totuși o soluție alternativă. Dacă omiți parametrul image : url+'/youtube.png' din metodă, atunci se va crea automat un element <span> gol cu clasa mceIcon și o altă clasă mce_[plugin_name].

Apoi poți folosi CSS pentru a stiliza acel element <span> după cum dorești.

Poți folosi FontAwesome direct în CSS-ul tău acum, ceva de genul (asigură-te că schimbi clasa substituită .mce_[plugin_name] folosită aici cu clasa ta reală):

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

span.mce_[plugin_name]:before {
    content: "\f166"; /* Valoare pentru pictograma YouTube */
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    text-decoration: inherit;
/*--ajustează după necesități--*/
    color: #000;
    font-size: 18px;
    padding-right: 0.5em;
    position: absolute;
    top: 10px;
    left: 0;
}

ACTUALIZARE

Iată cum încarc fișierul meu CSS FontAwesome. Am adaptat pentru a se încărca în zona de administrare pentru ceea ce trebuie să faci. Îl încarc de pe CDN-ul BootStrap, dar ai putea descărca fișierul CSS și să-l încarci din folderul temei sau al plugin-ului folosind aceeași funcție admin_enqueue_scripts();.

// Încarcă 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 iul. 2014 15:29:54
Comentarii

Nu folosesc un plugin.

user1906399 user1906399
1 iul. 2014 17:23:37

iar iconița YouTube de la fontawesome se obține folosind <i class="fa fa-youtube"></i>. Cum pot folosi acest lucru în CSS?

user1906399 user1906399
1 iul. 2014 17:43:01

Ceea ce faci în codul tău de mai sus este să adaugi propriul tău plugin TinyMCE - nu mă refer la utilizarea unui plugin WordPress :-) Sugerez să arunci un ochi și peste acest tutorial pentru a înțelege mai bine procesul, ar putea fi util :-)

Matt Royal Matt Royal
1 iul. 2014 17:44:13

Elementul <i class="fa fa-youtube"></i> reprezintă marcajul HTML căruia i se aplică implicit CSS-ul FontAwesome. De asemenea, îl puteți aplica și altor elemente folosind Selectoare CSS Pseudo, așa cum am făcut și eu în codul meu, dacă doriți.

Matt Royal Matt Royal
1 iul. 2014 17:47:38

Nu primesc niciun element span dacă las image:. Pot accesa butonul folosind ID-ul său care este #mce_17 și pot folosi acțiunea admin_head, iar pot schimba culoarea de fundal etc. Sunt confuz unde ar trebui să pun folderul FontAwesome pe care l-am descărcat și ar trebui doar să includ fișierul CSS în functions.php? După aceea, ce ar trebui să fac? Permiteți-mi să pun întregul cod.

user1906399 user1906399
1 iul. 2014 17:55:49

Da, poți folosi și ID-ul. Trebuie să folosești funcția wp_enqueue_style pentru a adăuga fișierul CSS FontAwesome pe site-ul tău înainte de a putea apela CSS-ul pe care ți l-am furnizat anterior.

Matt Royal Matt Royal
1 iul. 2014 18:06:05

nu sunt sigur de unde obții valoarea "\f1666", nu există documentație despre ea pe site-ul FontAwesome

user1906399 user1906399
1 iul. 2014 18:12:47

nu funcționează așa cum ai spus, elementul este <button role="presentation" type="button" tabindex="-1">YouTube</button>, tot ce trebuie să fac este să înlocuiesc YouTube cu <i fa fa-youtube></i>

user1906399 user1906399
1 iul. 2014 18:15:40

Valoarea "\f1666" este codul de caracter UTF-8. Poți găsi aceste referințe în FontAwesome Cheatsheet

Matt Royal Matt Royal
1 iul. 2014 18:19:45

`function tinymce_style(){

?> <style> #mce_17{

      content: "\f166"; /* Valoare pentru pictograma Youtube */
  font-family: FontAwesome;
  font-style: normal;
  font-weight: normal;
  text-decoration: inherit;

     }

</style>

<?php }

add_action('admin_head', 'tinymce_style');` folosesc asta

user1906399 user1906399
1 iul. 2014 18:24:52

Care este elementul <div> care încadrează elementul <button>?

Matt Royal Matt Royal
1 iul. 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');` și asta pentru a adăuga css-ul fontawesome

user1906399 user1906399
1 iul. 2014 18:27:02

continuăm această discuție în chat.

Matt Royal Matt Royal
1 iul. 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> asta obțin din Google Inspect Element

user1906399 user1906399
1 iul. 2014 18:29:08

am nevoie de 20 reputație pentru a putea discuta în chat

user1906399 user1906399
1 iul. 2014 18:30:57

Încearcă asta deoarece foloseai acțiunea greșită și încărcai FontAwesome în website și nu în Panoul de administrare cum ar trebui... 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 iul. 2014 18:32:35

acum primesc <i class="mce-ico mce-i-youtube"></i> în interiorul elementului button, dar nu funcționează.

user1906399 user1906399
1 iul. 2014 18:39:42

Acum am înțeles, nu este un element span ci un element i care apare dacă nu este specificat niciun text sau imagine. Așa că trebuia doar să targetez clasa i.mce-i-youtube, care este diferită cum ai menționat. Căutam elementul span. Mulțumesc pentru ajutor și timpul acordat.

user1906399 user1906399
1 iul. 2014 22:06:35
Arată celelalte 13 comentarii
0

Am testat următoarele pe WordPress 4.6.1

Initial am căutat acest proces pentru a crea un buton care să genereze un shortcode. Pe baza mai multor postări, inițial am folosit următorii parametri addButton în fișierul meu javascript pentru a decora butonul TINYMCE...

ed.addButton('wpse72394_button', { title: 'titlul butonului meu', cmd: 'wpse72394_inser', image: url + '/calea/către/imagine.png' });

...Dar nu am vrut să creez un buton nou de la zero sau doar o etichetă text. Am vrut în schimb să folosesc o pictogramă existentă în WordPress. Am descoperit că pot înlocui parametrul image: cu un parametru icon: astfel...

ed.addButton('wpse72394_button', { title: 'Inserează shortcode', cmd: 'wpse72394_insert_shortcode', icon: 'wp_code' });

În WordPress, dacă te uiți în

calea-către-site\wp-includes\js\tinymce\plugins\wordpress\plugins.js

vei descoperi diverse opțiuni precum...

      wp_help
      wp_more
      wp_page
      wp_code

Nu cred că acestea sunt pictograme fontawesome, dar sunt suficient de apropiate pentru mine pentru a face treaba fără a adăuga referințe suplimentare de css sau link-uri CDN.

31 oct. 2016 18:27:31
1

Iată o soluție extrem de simplă pentru această problemă.

Mai întâi, adăugați biblioteca FontAwesome în backend-ul WordPress prin crearea și adăugarea acesteia la 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);

Apoi, în fișierul javascript:

ed.addButton('recentposts', {
            title : 'Postări recente',
            icon: ' fa fa-camera-retro', // observați un spațiu înainte de 'fa'

Acest tip de hack a funcționat pentru mine. Sunt sigur că va funcționa și pentru tine :)

19 iul. 2018 17:12:47
Comentarii

Funcționează excelent (rulez WP 5.7.2 și FontAwesome 5.15.1). Doar asigură-te să fii atent la SPAȚIUL dinaintea primei clase LOL

revive revive
13 mai 2021 20:13:31