Özel popup tinymce penceresine “Bağlantı Ekle / Düzenle” düğmesi nasıl eklenir?


11

Özel sınıfları ile bazı div etiketleri içine sarılarak bir "side-tag" dönüşür makalenin gövdesinde bazı metin eklemek gerekir.

Tinymce'de metin alanı olan yeni bir pencere açan özel bir düğme oluşturdum. Metni yazıyorsunuz ve Tamam'a bastığınızda, başlangıç ​​ve endig div etiketlerini ekliyor ve imlecinizin bulunduğu wp düzenleyicisine ekliyor.

İşte kod:

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

Ve ne yapar:

resim açıklamasını buraya girin

Şimdiye kadar her şey çalışıyor ama ... Ayrıca açılır pencere hala açıkken, varsayılan düzenleyicinin "Bağlantı Ekle / Düzenle" düğmesinin nasıl çalıştığını gösteren bağlantılar eklemek istiyorum. Tinymce bağlantı eklentisini nasıl kullanacağımı biliyorum ama bu yardımcı olmuyor. Ben esas olarak zaten yayınlanmıştır bu yüzden buna ihtiyacım var:

resim açıklamasını buraya girin

Özel açılır penceremde bu düğmeyi çağırmanın veya hızlı etiketler işlevini çağırmanın bir yolu var mı?


Bunun başlamanıza yardımcı olacağını düşünüyorum wordpress.stackexchange.com/questions/209490/…
brianjohnhanna

Yanıtlar:


10

Bu yüzden kendi sorumu cevaplıyorum, aynı problemle karşı karşıya olan veya karşı karşıya kalacaklar için.

İki düğme ekledim. Biri, bir yazı seçmek için wordpress'in yerleşik penceresini açar ve bağlantıyı ekler. Diğeri, bir resim seçmek için wordpress'in yerleşik medya penceresini açar. Sonunda bir şekilde elde ettiğiniz budur.

resim açıklamasını buraya girin

Ayrı bir dosyada iki PHP fonksiyonuna ve bir JS fonksiyonuna ihtiyacınız olacaktır. Function.php dosyasına veya özel işlevlerinizin olduğu her yerde aşağıdakileri ekleyin:

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

Ve JS dosyası.

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

Umarım bu bazılarınıza yardımcı olur.


1
Bu konuda iki sorun var: medya açılır eklemek benim diğer pop-up arkasında açılır; ve bağlantı hiç çıkmıyor.
Samyer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.