J'ai ajouté un bouton personnalisé à l'éditeur TinyMCE et je veux ouvrir Thickbox de WP lorsque je clique dessus.
Comment puis-je faire en sorte que la fonction tb_show()
charge le contenu que je souhaite avec ajax?
// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
echo 'weqwtegeqgr'; // <- this should be displayed in the TB
die();
}
Voici quelques exemples du code de plugin d'éditeur que j'utilise:
init : function(ed, url) {
ed.addButton('do_stuff', {
title : 'Do Stuff',
image : url + '/icon.gif',
onclick : function() {
OpenMyThickbox('do_stuff');
}
});
...
Donc, la fonction javascript OpenMyThickbox
devrait faire ce que je veux:
function OpenMyThickbox(tag){
tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
Le second paramètre pour tb_show
est l'URL, vous voudrez donc utiliser quelque chose comme ..
<?php
$ajax_url = add_query_arg(
array(
'action' => 'getTheContent',
'query_var1' => 'value1',
'query_var2' => 'value2'
),
admin_url( 'admin-ajax.php' )
);
?>
tb_show(tag, '<?php echo $ajax_url; ?>' );
J'imagine que vous devez transmettre l'action et tous les vars de requête supplémentaires manuellement (comme ci-dessus). Sinon, votre demande concerne simplement admin-ajax.php
, lorsque vous cherchez quelque chose qui ressemble à ... admin-ajax.php?action=getTheContent&someothervar=someothervalue
, d'où le add_query_arg
. utilisation ci-dessus ..
Pour clarification:
L'appel suivant à add_query_arg
...
add_query_arg(
array(
'action' => 'getTheContent',
'query_var1' => 'value1',
'query_var2' => 'value2'
),
admin_url( 'admin-ajax.php' )
);
Est équivalent à et produira ...
http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2
M'expliquant maintenant, je me suis rendu compte que nous ne voulions pas l’URL absolue et n’avions donc pas besoin de l’appel à admin_url
. Le code devrait plutôt être.
<?php
$ajax_url = add_query_arg(
array(
'action' => 'getTheContent',
'query_var1' => 'value1',
'query_var2' => 'value2'
),
'admin-ajax.php'
);
?>
tb_show(tag, '<?php echo $ajax_url; ?>');
Donc, l'URL résultante ressemble à quelque chose comme ça ..
admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2
Fonctions référencées dans les exemples de code ci-dessus:
Ajouter une requête Arg
http://codex.wordpress.org/Function_Reference/add_query_arg
URL administrateur
http://codex.wordpress.org/Function_Reference/admin_url
Javascript et PHP ne sont pas très intelligents. Cette réponse ne fait que dérouter.
tb_show is javascript add_query_arg est PHP
donc cette solution est uniquement valide dans PHP et le code approprié est
...
?>
tb_show(
'whatever',
<?php echo add_query_arg( array(
'action' => 'getTheContent',
'query_var1' => 'value1',
'query_var2' => 'value2',
), 'admin-ajax.php'); ?>
);
<?php
...
Et en javascript n'est pas valide du tout car nous ne pouvons pas utiliser add_query_arg