Come aggiungere il pulsante "Inserisci / Modifica collegamento" nella finestra di popup popup personalizzata?


11

Devo inserire del testo nel corpo dell'articolo, che si trasforma in un "tag laterale" avvolgendolo 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 inizio e fine e lo inserisce nell'editor wp 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: 'Side Tag',
            onclick: function (e) {
                editor.windowManager.open( {
                    title: 'Insert a Sidetag',
                    body: [{
                        type: 'textbox',
                        name: 'title',
                        placeholder: 'Type the side tag content here.',
                        multiline: true,
                        minWidth: 700,
                        minHeight: 50,
                    },
                    {
                        type: 'button',
                        name: 'link',
                        text: 'Insert/Edit link',
                        onclick: function( e ) {
                            //get the Wordpess' "Insert/edit link" popup window.
                        },
                    }],
                    onsubmit: function( e ) {
                        editor.insertContent( '<div class="side-tag-wrap hidden-xs"><div class="side-tag">' + e.data.title + '</div></div>');
                    }
                });
            }
        });
    });
})();

E cosa fa:

inserisci qui la descrizione dell'immagine

Finora tutto funziona ma ... Voglio anche essere in grado di aggiungere collegamenti mentre la finestra popup è ancora attiva, esattamente come funziona il pulsante "Inserisci / Modifica collegamento" dell'editor predefinito. So usare il plugin link di tinymce ma questo non aiuta. Voglio principalmente collegare post che sono già pubblicati, quindi ho bisogno di questo:

inserisci qui la descrizione dell'immagine

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


Penso che questo ti aiuterà a iniziare wordpress.stackexchange.com/questions/209490/…
brianjohnhanna,

Risposte:


10

Quindi sto rispondendo alla mia domanda, per coloro che affrontano o dovranno affrontare lo stesso problema.

Ho aggiunto due pulsanti. Uno apre la finestra incorporata di wordpress per selezionare un post e inserisce il collegamento. L'altro apre la finestra multimediale incorporata di wordpress per selezionare un'immagine. Questo è ciò che in qualche modo ottieni alla fine.

inserisci qui la descrizione dell'immagine

Avrai bisogno di due funzioni PHP e una JS in un file separato. Nel function.php, o ovunque tu abbia le tue funzioni personalizzate aggiungi quanto segue:

/**
 * Add a custom button to tinymce editor
 */
function custom_mce_buttons() {
    // Check if WYSIWYG is enabled
    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');


// Add the path to the js file with the custom button function
function custom_tinymce_plugin( $plugin_array ) {
    $plugin_array['custom_mce_button1'] = get_template_directory_uri() .'PATH_TO_THE_JS_FILE';
    $plugin_array['custom_mce_button2'] = get_template_directory_uri() .'PATH_TO_THE_OTHER_JS_FILE';
    return $plugin_array;
}

// Register and add new button in the 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: 'THE_TEXT_OF_THE_BUTTON',
            onclick: function (e) {
                editor.windowManager.open( {
                    title: 'THE_TITLE_OF_THE_POPUP_WINDOW',
                    body: [{
                        type: 'textbox',
                        name: 'title',
                        placeholder: 'PLACE_HOLDER_TEXT',
                        multiline: true,
                        minWidth: 700,
                        minHeight: 50,
                    },
                    {
                        type: 'button',
                        name: 'link',
                        text: 'Insert/Edit link',
                        onclick: function( e ) {
                            //get the Wordpess' "Insert/edit link" popup window.
                            var textareaId = jQuery('.mce-custom-textarea').attr('id');
                            wpActiveEditor = true; //we need to override this var as the link dialogue is expecting an actual wp_editor instance
                            wpLink.open( textareaId ); //open the link popup
                            return false;
                        },
                    },
                    {
                        type: 'button',
                        name: 'image',
                        classes: 'sidetag-media-button',
                        text: 'Insert Media',
                        onclick: function( e ) {

                            jQuery(function($){
                                // Set all variables to be used in scope
                                var frame;
                                //it has to match the "textareaID" above, because it is the input field that we are
                                //going to insert the data in HTML format.
                                var imgContainer = $( '.mce-custom-textarea' );

                                // ADD IMAGE LINK
                                event.preventDefault();

                                // If the media frame already exists, reopen it.
                                if ( frame ) {
                                    frame.open();
                                    return;
                                }

                                // Create a new media frame
                                frame = wp.media({
                                    title: 'Select or Upload Media',
                                    button: {
                                      text: 'Use this media'
                                    },
                                    multiple: false  // Set to true to allow multiple files to be selected
                                });

                                // When an image is selected in the media frame...
                                frame.on( 'select', function() {

                                    // Get media attachment details from the frame state
                                    var attachment = frame.state().get('selection').first().toJSON();

                                    // Send the attachment URL to our custom image input field.
                                    var imageContent = '<img class="side-tag-image" src="'+attachment.url+'" alt="'+attachment.alt+'" style="max-width:100%;"/>'+attachment.caption;
                                    imgContainer.val( imageContent + imgContainer.val() );

                                });
                                // Finally, open the modal on click
                                frame.open();
                        });
                        return false;
                        }
                    }],
                    onsubmit: function( e ) {
                        // wrap it with a div and give it a class name
                        editor.insertContent( '<div class="CLASS_NAME">' + e.data.title + '</div>');
                    }
                });
            }
        });
    });
})();

Spero che questo possa aiutare alcuni di voi ..


1
Ho avuto due problemi con questo: il popup Inserisci media si apre dietro l'altro mio popup; e il collegamento non viene emesso affatto.
Samyer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.