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.