Wie füge ich die Schaltfläche "Link einfügen / bearbeiten" in ein benutzerdefiniertes Popup-Tinymce-Fenster ein?

11

Ich muss Text in den Hauptteil des Artikels einfügen, der sich in ein "Side-Tag" verwandelt, indem er in einige div-Tags mit benutzerdefinierten Klassen eingeschlossen wird.

Ich habe in tinymce eine benutzerdefinierte Schaltfläche erstellt, die ein neues Fenster mit einem Textfeld öffnet. Sie schreiben den Text und wenn Sie auf OK klicken, werden die Div-Tags begin und endig hinzugefügt und in den wp-Editor eingefügt, in dem sich Ihr Cursor befand.

Hier ist der Code:

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

Und was es tut:

Geben Sie hier die Bildbeschreibung ein

Bisher funktioniert alles, aber ... Ich möchte auch Links hinzufügen können, während das Popup-Fenster noch geöffnet ist, genau wie die Schaltfläche "Link einfügen / bearbeiten" des Standardeditors funktioniert. Ich weiß, wie man das Link-Plugin von tinymce benutzt, aber das hilft nicht. Ich möchte hauptsächlich bereits veröffentlichte Beiträge verlinken, daher benötige ich Folgendes:

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, diese Schaltfläche in meinem benutzerdefinierten Popup-Fenster aufzurufen oder die Quicktags-Funktion aufzurufen?

Achillx
quelle
Ich denke, dies wird Ihnen den Einstieg
erleichtern

Antworten:

10

Also beantworte ich meine eigene Frage für diejenigen, die vor dem gleichen Problem stehen oder stehen werden.

Ich habe zwei Schaltflächen hinzugefügt. Man öffnet das eingebaute Fenster von WordPress, um einen Beitrag auszuwählen und den Link einzufügen. Das andere öffnet das integrierte Medienfenster von WordPress, um ein Bild auszuwählen. Das ist es, was du am Ende irgendwie bekommst.

Geben Sie hier die Bildbeschreibung ein

Sie benötigen zwei PHP-Funktionen und eine JS-Funktion in einer separaten Datei. Fügen Sie in der Datei functions.php oder wo immer Sie Ihre benutzerdefinierten Funktionen haben, Folgendes hinzu:

/**
 * 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;
}

Und die JS-Datei.

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

Ich hoffe das wird einigen von euch helfen ..

Achillx
quelle
1
Ich habe zwei Probleme damit: Das Popup zum Einfügen von Medien wird hinter meinem anderen Popup geöffnet. und der Link wird überhaupt nicht ausgegeben.
Samyer