Como adicionar o botão “Inserir / Editar link” na janela pop-up do tinymce?

10

Eu preciso inserir algum texto no corpo do artigo, que se transforma em uma "tag lateral", agrupando-a dentro de algumas tags div com classes personalizadas.

Eu criei um botão personalizado no tinymce que abre uma nova janela com um campo de texto. Você escreve o texto e quando você clica em OK, ele adiciona as tags div de início e fim e as insere no editor wp onde seu cursor estava.

Aqui está o código:

(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 o que faz:

Atéagora,tudofunciona,mas...Eutambémqueropoderadicionarlinksenquantoajanelapop-upaindaestiverativa,exatamentecomoobotão"Inserir / Editar link" do editor padrão funciona. Eu sei como usar o plug-in de links do tinymce, mas isso não ajuda. Eu quero principalmente vincular postagens já publicadas, então eu preciso disso:

Existe uma maneira de chamar esse botão na minha janela pop-up personalizada ou chamar a função de tags rápidas?

    
por Achillx 04.08.2016 / 18:25

1 resposta

10

Então estou respondendo a minha própria pergunta, para aqueles que enfrentam ou enfrentarão o mesmo problema.

Eu adicionei dois botões. Uma abre a janela incorporada do wordpress para selecionar uma postagem e insere o link. O outro abre a janela de mídia incorporada do wordpress para selecionar uma imagem. Isso é o que de alguma forma você consegue no final.

VocêprecisarádeduasfunçõesPHPeumaJSemumarquivoseparado.Noarquivofunctions.php,ouondequerquevocêtenhasuasfunçõespersonalizadas,adicioneoseguinte:

/***Addacustombuttontotinymceeditor*/functioncustom_mce_buttons(){//CheckifWYSIWYGisenabledif(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');//Addthepathtothejsfilewiththecustombuttonfunctionfunctioncustom_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;}//Registerandaddnewbuttonintheeditorfunctionregister_mce_buttons($buttons){array_push($buttons,'custom_mce_button1');array_push($buttons,'custom_mce_button2');return$buttons;}

EoarquivoJS.

(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/Editlink',onclick:function(e){//gettheWordpess'"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>');
                    }
                });
            }
        });
    });
})();

Espero que isso ajude alguns de vocês ...

    
por Achillx 07.02.2017 / 18:37