Come aggiungere il pulsante "Inserisci/Modifica link" in una finestra popup personalizzata di TinyMCE?

4 ago 2016, 19:25:16
Visualizzazioni: 13.8K
Voti: 13

Devo inserire del testo nel corpo dell'articolo che si trasformi in un "tag laterale" racchiudendolo all'interno di alcuni tag div con classi personalizzate.

Ho creato un pulsante personalizzato in TinyMCE che apre una nuova finestra con un campo di testo. Scrivi il testo e quando premi OK aggiunge i tag div di apertura e chiusura e lo inserisce nell'editor WordPress dove si trovava il cursore.

Ecco il codice:

(function () {
    tinymce.PluginManager.add('custom_mce_button2', function(editor, url) {
        editor.addButton('custom_mce_button2', {
            icon: false,
            text: 'Tag Laterale',
            onclick: function (e) {
                editor.windowManager.open( {
                    title: 'Inserisci un Tag Laterale',
                    body: [{
                        type: 'textbox',
                        name: 'title',
                        placeholder: 'Digita qui il contenuto del tag laterale.',
                        multiline: true,
                        minWidth: 700,
                        minHeight: 50,
                    },
                    {
                        type: 'button',
                        name: 'link',
                        text: 'Inserisci/Modifica link',
                        onclick: function( e ) {
                            //ottieni la finestra popup "Inserisci/modifica link" di WordPress
                        },
                    }],
                    onsubmit: function( e ) {
                        editor.insertContent( '<div class="side-tag-wrap hidden-xs"><div class="side-tag">' + e.data.title + '</div></div>');
                    }
                });
            }
        });
    });
})();

Ecco cosa fa:

Finestra popup personalizzata TinyMCE

Finora tutto funziona ma... Vorrei anche poter aggiungere link mentre la finestra popup è ancora aperta, esattamente come funziona il pulsante "Inserisci/Modifica link" dell'editor predefinito. So come usare il plugin link di TinyMCE ma questo non aiuta. Principalmente voglio collegare articoli già pubblicati quindi ho bisogno di questo:

Finestra popup link di WordPress

C'è un modo per chiamare questo pulsante nella mia finestra popup personalizzata o chiamare la funzione quicktags?

1
Commenti

Penso che questo ti aiuterà a iniziare http://wordpress.stackexchange.com/questions/209490/how-to-use-wplink-without-editor

brianjohnhanna brianjohnhanna
11 ago 2016 17:06:07
Tutte le risposte alla domanda 1
1
11

Quindi rispondo alla mia stessa domanda, per coloro che si trovano o si troveranno di fronte allo stesso problema.

Ho aggiunto due pulsanti. Uno apre la finestra integrata di WordPress per selezionare un articolo e inserire il link. L'altro apre la finestra multimediale integrata di WordPress per selezionare un'immagine. Questo è più o meno il risultato finale.

Anteprima pulsanti editor personalizzati

Avrete bisogno di due funzioni PHP e una JS in un file separato. Nel file functions.php, o dove avete le vostre funzioni personalizzate, aggiungete quanto segue:

/**
 * Aggiunge un pulsante personalizzato all'editor tinymce
 */
function custom_mce_buttons() {
    // Verifica se il WYSIWYG è abilitato
    if ( get_user_option( 'rich_editing' ) == 'true' ) {
        add_filter( 'mce_external_plugins', 'custom_tinymce_plugin' );
        add_filter( 'mce_buttons', 'register_mce_buttons' );
    }
}
add_action('admin_head', 'custom_mce_buttons');


// Aggiunge il percorso al file js con la funzione del pulsante personalizzato
function custom_tinymce_plugin( $plugin_array ) {
    $plugin_array['custom_mce_button1'] = get_template_directory_uri() .'PERCORSO_DEL_FILE_JS';
    $plugin_array['custom_mce_button2'] = get_template_directory_uri() .'PERCORSO_DEL_ALTRO_FILE_JS';
    return $plugin_array;
}

// Registra e aggiunge il nuovo pulsante nell'editor
function register_mce_buttons( $buttons ) {
    array_push( $buttons, 'custom_mce_button1' );
    array_push( $buttons, 'custom_mce_button2' );
    return $buttons;
}

E il file JS.

(function () {
    tinymce.PluginManager.add('custom_mce_button1', function(editor, url) {
        editor.addButton('custom_mce_button1', {
            icon: false,
            text: 'TESTO_DEL_PULSANTE',
            onclick: function (e) {
                editor.windowManager.open( {
                    title: 'TITOLO_DELLA_FINESTRA_POPUP',
                    body: [{
                        type: 'textbox',
                        name: 'title',
                        placeholder: 'TESTO_SEGNALIBRO',
                        multiline: true,
                        minWidth: 700,
                        minHeight: 50,
                    },
                    {
                        type: 'button',
                        name: 'link',
                        text: 'Inserisci/Modifica link',
                        onclick: function( e ) {
                            // Ottiene la finestra popup "Inserisci/modifica link" di WordPress
                            var textareaId = jQuery('.mce-custom-textarea').attr('id');
                            wpActiveEditor = true; // Dobbiamo sovrascrivere questa var poiché il dialogo del link si aspetta un'istanza effettiva di wp_editor
                            wpLink.open( textareaId ); // Apre il popup del link
                            return false;
                        },
                    },
                    {
                        type: 'button',
                        name: 'image',
                        classes: 'sidetag-media-button',
                        text: 'Inserisci Media',
                        onclick: function( e ) {

                            jQuery(function($){
                                // Imposta tutte le variabili da utilizzare nell'ambito
                                var frame;
                                // Deve corrispondere a "textareaID" sopra, perché è il campo di input dove
                                // inseriremo i dati in formato HTML.
                                var imgContainer = $( '.mce-custom-textarea' );

                                // COLLEGAMENTO IMMAGINE
                                event.preventDefault();

                                // Se il frame media esiste già, riaprirlo
                                if ( frame ) {
                                    frame.open();
                                    return;
                                }

                                // Crea un nuovo frame media
                                frame = wp.media({
                                    title: 'Seleziona o Carica Media',
                                    button: {
                                      text: 'Usa questo media'
                                    },
                                    multiple: false  // Imposta a true per consentire la selezione di più file
                                });

                                // Quando un'immagine viene selezionata nel frame media...
                                frame.on( 'select', function() {

                                    // Ottiene i dettagli dell'allegato media dallo stato del frame
                                    var attachment = frame.state().get('selection').first().toJSON();

                                    // Invia l'URL dell'allegato al nostro campo di input immagine personalizzato
                                    var imageContent = '<img class="side-tag-image" src="'+attachment.url+'" alt="'+attachment.alt+'" style="max-width:100%;"/>'+attachment.caption;
                                    imgContainer.val( imageContent + imgContainer.val() );

                                });
                                // Infine, apre la modale al click
                                frame.open();
                        });
                        return false;
                        }
                    }],
                    onsubmit: function( e ) {
                        // Lo racchiude in un div e gli assegna un nome di classe
                        editor.insertContent( '<div class="NOME_CLASSE">' + e.data.title + '</div>');
                    }
                });
            }
        });
    });
})();

Spero che questo possa aiutare alcuni di voi..

7 feb 2017 19:37:18
Commenti

Ho due problemi con questo: la finestra popup per inserire i media si apre dietro il mio altro popup; e il link non viene visualizzato affatto.

Samyer Samyer
24 ago 2017 17:27:08