Ouvrez une Thickbox avec du contenu via AJAX


11

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 tb_show()fonction charge le contenu que je veux avec ajax?

// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
  echo 'weqwtegeqgr'; // <- this should be displayed in the TB
  die();
}

Voici une partie du code du plugin de l'éditeur que j'utilise:

init : function(ed, url) {
  ed.addButton('do_stuff', {
    title : 'Do Stuff',
    image : url + '/icon.gif',
    onclick : function() {
        OpenMyThickbox('do_stuff');
    }
  });
...

La OpenMyThickboxfonction javascript devrait donc faire ce que je veux:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}

use admin_url ('admin-ajax.php'); pour l'url
Bainternet

J'ai une page blanche. même si j'entre google.com
onetrickpony

Réponses:


6

Le deuxième paramètre pour tb_showest 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; ?>' );

Je suppose que vous devez passer l'action et toutes les variables de requête supplémentaires manuellement (comme ci-dessus), sinon votre demande est simplement pour admin-ajax.php, lorsque ce que vous recherchez est quelque chose comme ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, d'où l' add_query_argutilisation 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

Pourtant!

Après m'être expliqué maintenant, je me suis rendu compte que nous ne voulons pas l'URL absolue et que nous n'avons donc pas besoin de l'appel admin_urllà-dedans. Le code devrait plutôt l'ê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; ?>'); 

L'URL résultante ressemble donc à ceci.

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2

Fonctions référencées dans les exemples de code ci-dessus:


Cela ne sera-t-il pas un $_get['action']parce que l'appel ajax WordPress recherche $_post['action']? ou ai-je tort?
Bainternet

Ce sera $_POSTou à l' $_REQUESTintérieur d'un rappel ajax en général, sauf si vous définissez explicitement votre fonction de demande ajax à utiliser à la getplace, dans le contexte d'un appel de boîte épaisse, nous utilisons une chaîne de requête, qui devrait toujours apparaître dans $_REQUEST(car elle contient généralement les deux $_GETet $_POST) ..
t31os

Non, ce que je demande, c'est si j'utilise add_query_argles arguments ajoutés seront-ils envoyés sous forme de message ou reçus?
Bainternet

Ni l' add_query_argun ni l'autre, ajoute une chaîne (d'une URL) avec des paramètres de requête, il ne fait aucun envoi, donc je ne suis pas sûr de comprendre votre question ..
t31os

Mis à jour ma réponse ..
t31os

3

Gâcher javascript et PHP n'est pas très intelligent. Cette réponse ne fait que confondre.

tb_show est javascript add_query_arg est PHP

donc cette solution n'est valable qu'en PHP et le bon code 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


En quoi est-ce différent de la solution à part le fait qu'elle contient les <?php ?>étiquettes? Si c'est tout ce que vous voulez souligner, veuillez apporter une modification à la solution pour la corriger. Pas besoin d'ajouter une réponse distincte pour expliquer ce qui ne va pas avec une autre réponse. C'est pourquoi les modifications apportées à la communauté sont appréciées.
kaiser

@kaiser Les modifications modifiant la signification d'un message ne sont généralement pas les bienvenues. En tant que réponse distincte, c'est correct.
fuxia

@toscho Et comment cela change-t-il exactement le sens ? Imo c'est corriger ou ajouter les bits manquants .
kaiser

Bayen avait raison de signaler l'erreur ici, je mélangeais PHP et Javascript, je devrais vraiment le repérer plus tôt. J'ai apporté les modifications nécessaires à ma réponse, et merci pour les commentaires Bayen (j'aime savoir quand je fais des erreurs).
t31os
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.