Ho avuto lo stesso problema solo ora e ho trovato la soluzione, quindi la sto condividendo qui. Spero non sia troppo tardi.
Prima di poter utilizzare il pulsante WP Aggiungi supporto, è necessario accodare lo script necessario. Questo è facile, basta chiamare la funzione wp_enqueue_media() in questo modo:
add_action('admin_enqueue_scripts', 'enqueue_scripts_styles_admin');
function enqueue_scripts_styles_admin(){
wp_enqueue_media();
}
Questa chiamata modo da garantirvi sempre le librerie necessarie per utilizzare il tasto WP Media.
Naturalmente si dovrebbe anche avere gli elementi HTML per contenere l'URL caricato file multimediale/selezionato, qualcosa di simile:
<input type="text" class="selected_image" />
<input type="button" class="upload_image_button" value="Upload Image">
Il primo campo di testo conterrà l'URL del file multimediale, mentre la seconda è un pulsante per aprire la finestra popup multimediale stessa.
Poi, nel tuo jscript, avresti qualcosa di simile:
var custom_uploader;
$('.upload_image_button').click(function(e) {
e.preventDefault();
var $upload_button = $(this);
//Extend the wp.media object
custom_uploader = wp.media.frames.file_frame = wp.media({
title: 'Choose Image',
button: {
text: 'Choose Image'
},
multiple: false
});
//When a file is selected, grab the URL and set it as the text field's value
custom_uploader.on('select', function() {
var attachment = custom_uploader.state().get('selection').first().toJSON();
$upload_button.siblings('input[type="text"]').val(attachment.url);
});
//Open the uploader dialog
custom_uploader.open();
});
Ora io non ho intenzione di spiegare ogni linea, perché non è così difficile da capire. La parte più importante è quella che usa l'oggetto wp per far funzionare tutti questi elementi.
La parte complicata è fare tutto questo in un popup TinyMCE (che è il problema che ho dovuto affrontare). Ho cercato hi e lo per la soluzione ed ecco cosa ha funzionato per me. Ma prima parlerò di quale problema ho incontrato per primo. Quando ho provato a implementarlo, ho riscontrato il problema "WP isdefinito" sul popup stesso. Per risolvere questo problema, basta passare l'oggetto WP allo script in questo modo:
(function() {
tinymce.create('tinymce.plugins.someplugin', {
init : function(ed, url) {
// Register commands
ed.addCommand('mcebutton', function() {
ed.windowManager.open(
{
file : url + '/editor_button.php', // file that contains HTML for our modal window
width : 800 + parseInt(ed.getLang('button.delta_width', 0)), // size of our window
height : 600 + parseInt(ed.getLang('button.delta_height', 0)), // size of our window
inline : 1
},
{
plugin_url : url,
wp: wp
}
);
});
// Register buttons
ed.addButton('someplugin_button', {title : 'Insert Seomthing', cmd : 'mcebutton', image: url + '/images/some_button.gif' });
}
});
// Register plugin
// first parameter is the button ID and must match ID elsewhere
// second parameter must match the first parameter of the tinymce.create() function above
tinymce.PluginManager.add('someplugin_button', tinymce.plugins.someplugin);
})();
Quello che ci interessa è questa linea => "wp: wp". Questa linea garantisce che stiamo passando l'oggetto wp alla finestra pop-up (un iframe in realtà ...) che deve essere aperto quando clicchiamo sul pulsante tinymce. È possibile passare qualsiasi cosa alla finestra popup tramite questo oggetto (il 2 ° parametro del metodo ed.windowManager.open)!
Ultimo ma non meno importante si avrebbe dovuto riferimento che passava oggetto wp sul tuo javascript in questo modo:
var args = top.tinymce.activeEditor.windowManager.getParams();
var wp = args.wp;
Assicurati di farlo prima di chiamare/utilizzando l'oggetto WP.
Questo è tutto ciò che devi fare per farlo funzionare.Ha funzionato per me, spero che funzioni per te :)