Bagaimana cara menambahkan tombol "Sisipkan / Edit tautan" di jendela popup tinymce khusus?

11

Saya perlu memasukkan beberapa teks ke dalam tubuh artikel, yang berubah menjadi "tag sisi" dengan membungkusnya di dalam beberapa tag div dengan kelas khusus.

Saya telah membuat tombol khusus dalam bentuk yang dapat memunculkan jendela baru dengan bidang teks. Anda menulis teks dan ketika Anda menekan OK itu menambahkan tag awal dan akhir div dan memasukkannya ke editor wp di mana kursor Anda berada.

Ini kodenya:

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

Dan apa fungsinya:

masukkan deskripsi gambar di sini

Sejauh ini semuanya berfungsi tetapi ... Saya juga ingin dapat menambahkan tautan saat jendela sembulan masih aktif, persis seperti tombol "Sisipkan / Edit tautan" dari editor default. Saya tahu cara menggunakan plugin tautan tinymce tetapi ini tidak membantu. Saya terutama ingin menautkan posting yang sudah diterbitkan jadi saya perlu ini:

masukkan deskripsi gambar di sini

Apakah ada cara untuk memanggil tombol ini di jendela sembulan khusus saya atau memanggil fungsi quicktag?

Achillx
sumber
Saya pikir ini akan membantu Anda memulai wordpress.stackexchange.com/questions/209490/...
brianjohnhanna

Jawaban:

10

Jadi saya menjawab pertanyaan saya sendiri, untuk mereka yang menghadapi atau akan menghadapi masalah yang sama.

Saya telah menambahkan dua tombol. Seseorang membuka jendela built-in wordpress untuk memilih posting dan memasukkan tautan. Yang lain membuka jendela media built-in wordpress untuk memilih gambar. Itulah yang akhirnya Anda dapatkan pada akhirnya.

masukkan deskripsi gambar di sini

Anda akan membutuhkan dua fungsi PHP dan satu JS satu di file yang terpisah. Di functions.php, atau di mana pun Anda memiliki fungsi kustom Anda tambahkan berikut ini:

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

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

Saya harap ini akan membantu beberapa dari Anda ..

Achillx
sumber
1
Saya punya dua masalah dengan ini: popup media insert terbuka di belakang popup saya yang lain; dan tautannya bukan keluaran sama sekali.
Samyer