Cum să adaugi un buton pentru shortcode în editorul TinyMCE?

13 nov. 2012, 05:21:28
Vizualizări: 66.2K
Voturi: 39

Cum se poate adăuga o pictogramă pentru orice plugin în postarea WordPress? Codul pe care vreau să-l inserez în plugin și care va apărea în bara de postare [wp-admin/post.php].

Ca în această imagine:

Exemplu buton shortcode în bara de editare WordPress

Rezultat: Dacă fac click pe pictogramă, aceasta scrie automat [plugin] în conținutul postării, astfel:

Exemplu inserare shortcode în editor după click pe buton

2
Comentarii

Adaugă o captură de ecran cu rezultatul pe care dorești să îl obții. Nu este clar ce vrei să realizezi.

fuxia fuxia
13 nov. 2012 06:13:22

Cred că vrei să creezi un plugin care adaugă un buton TinyMCE în editor pentru a insera un shortcode WordPress, corect?

developdaly developdaly
13 nov. 2012 06:40:19
Toate răspunsurile la întrebare 2
3
73

Pentru a adăuga butonul nostru în editorul TinyMCE trebuie să facem mai multe lucruri:

  1. Adăugăm butonul nostru în bara de unelte
  2. Înregistrăm un plugin TinyMCE
  3. Creăm acel plugin TinyMCE care să spună TinyMCE ce să facă când butonul nostru este apăsat.

Pașii #1 și #2

În acești pași înregistrăm plugin-ul nostru TinyMCE care va fi într-un fișier javascript la 'calea/către/shortcode.js' (vezi wpse72394_register_tinymce_plugin() mai jos)

 // proces de inițializare pentru înregistrarea butonului nostru
 add_action('init', 'wpse72394_shortcode_button_init');
 function wpse72394_shortcode_button_init() {

      //Renunță dacă utilizatorul nu va vedea niciodată TinyMCE
      if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') && get_user_option('rich_editing') == 'true')
           return;

      //Adaugă un callback pentru a înregistra plugin-ul nostru tinymce   
      add_filter("mce_external_plugins", "wpse72394_register_tinymce_plugin"); 

      // Adaugă un callback pentru a adăuga butonul nostru în bara de unelte TinyMCE
      add_filter('mce_buttons', 'wpse72394_add_tinymce_button');
}


//Acest callback înregistrează plugin-ul nostru
function wpse72394_register_tinymce_plugin($plugin_array) {
    $plugin_array['wpse72394_button'] = 'calea/către/shortcode.js';
    return $plugin_array;
}

//Acest callback adaugă butonul nostru în bara de unelte
function wpse72394_add_tinymce_button($buttons) {
            //Adaugă ID-ul butonului în array-ul $button
    $buttons[] = "wpse72394_button";
    return $buttons;
}

Pasul #3

Acum trebuie să creăm plugin-ul nostru TinyMCE. Acesta va fi într-un fișier 'calea/către/shortcode.js' (așa cum a fost specificat în pașii anteriori).

jQuery(document).ready(function($) {

    tinymce.create('tinymce.plugins.wpse72394_plugin', {
        init : function(ed, url) {
                // Înregistrează comanda pentru când butonul este apăsat
                ed.addCommand('wpse72394_insert_shortcode', function() {
                    selected = tinyMCE.activeEditor.selection.getContent();

                    if( selected ){
                        //Dacă textul este selectat când butonul este apăsat
                        //Înfășoară shortcode-ul în jurul lui.
                        content =  '[shortcode]'+selected+'[/shortcode]';
                    }else{
                        content =  '[shortcode]';
                    }

                    tinymce.execCommand('mceInsertContent', false, content);
                });

            // Înregistrează butoanele - declanșează comanda de mai sus când sunt apăsate
            ed.addButton('wpse72394_button', {title : 'Inserează shortcode', cmd : 'wpse72394_insert_shortcode', image: url + '/calea/către/image.png' });
        },   
    });

    // Înregistrează plugin-ul nostru TinyMCE
    // primul parametru este ID-ul butonului
    // al doilea parametru trebuie să se potrivească cu primul parametru al funcției tinymce.create() de mai sus
    tinymce.PluginManager.add('wpse72394_button', tinymce.plugins.wpse72394_plugin);
});
13 nov. 2012 19:24:42
Comentarii

În pasul 1, schimbarea hook-ului init cu admin_init ar putea economisi și puțină procesare suplimentară pe partea de front-end.

Tim Malone Tim Malone
16 nov. 2016 04:01:48

Depinde, poți avea TinyMCE și pe front-end. Dar da, dacă acest cod este doar pentru partea de administrare, admin_init ar fi preferabil.

Stephen Harris Stephen Harris
17 nov. 2016 12:19:52

Deci shortcode.js trebuie plasat aici wp-includes/js/tinymce/js/shortcode.js și de asemenea butonul nu are iconiță

Jadeye Jadeye
8 aug. 2020 23:03:11
1

Există prea multe informații pentru a pune întregul răspuns aici, așa că verifică acest ghid: http://wp.smashingmagazine.com/2012/05/01/wordpress-shortcodes-complete-guide/

Trebuie să creezi un fișier Javascript care să preia acțiunea de la butonul pe care îl înregistrezi prin WordPress și care inserează butonul TinyMCE în editor.

13 nov. 2012 06:44:41
Comentarii

Folosește query_posts, deci poate nu este cel mai bun exemplu de linkuit.

Brad Dalton Brad Dalton
11 iul. 2014 17:27:42