Apri una Thickbox con contenuto tramite AJAX


11

Ho aggiunto un pulsante personalizzato all'editor TinyMCE e voglio aprire Thickbox di WP quando faccio clic su di esso.

Come posso farlo in modo che la tb_show()funzione carichi il contenuto che desidero con Ajax?

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

Ecco alcuni dei codici del plugin dell'editor che sto usando:

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

Quindi la OpenMyThickboxfunzione JavaScript dovrebbe fare quello che voglio:

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

usa admin_url ('admin-ajax.php'); per url
Bainternet,

Ottengo una pagina vuota. anche se
entro su

Risposte:


6

Il secondo parametro per tb_showè l'URL, quindi ti consigliamo di usare qualcosa come ..

<?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; ?>' );

Immagino che tu debba passare manualmente l'azione e le eventuali query aggiuntive (come sopra), altrimenti la tua richiesta è semplicemente per admin-ajax.php, quando quello che stai cercando è qualcosa sulla falsariga di ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, quindi l' add_query_arguso sopra. .

Per chiarire:

La seguente chiamata a add_query_arg...

add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
);

È equivalente e produrrà ...

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2

Tuttavia!

Avendo ora spiegato me stesso, ho capito che non vogliamo l'URL assoluto e quindi non c'è bisogno della chiamata admin_url. Il codice dovrebbe invece essere.

<?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; ?>'); 

Quindi l'URL risultante è simile a questo ..

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

Funzioni a cui si fa riferimento nei precedenti esempi di codice:


Non sarà questo $_get['action']perché la chiamata Ajax di WordPress cerca $_post['action']? o mi sbaglio?
Bainternet,

Sarà $_POSTo $_REQUESTall'interno di un callback ajax in genere, a meno che tu non imposti esplicitamente la tua funzione di richiesta ajax da usare get, invece, nel contesto di una chiamata thickbox, usiamo una stringa di query, che dovrebbe comunque apparire in $_REQUEST(perché di solito contiene sia $_GETe $_POST) ..
t31os,

No, quello che sto chiedendo è se uso add_query_arggli argomenti aggiunti verranno inviati come post o riceverai?
Bainternet,

Né, add_query_argaccoda una stringa (di un url) con parametri di query, non esegue alcun invio, quindi non sono sicuro di aver capito la tua domanda ..
t31os,

Aggiornato la mia risposta ..
t31os,

3

Fare confusione con JavaScript e PHP non è molto intelligente. Questa risposta confonde solo.

tb_show è javascript add_query_arg è PHP

quindi questa soluzione è valida solo in PHP e il codice corretto è

...
?>
tb_show(
  'whatever',
  <?php echo add_query_arg( array(
    'action' => 'getTheContent',
    'query_var1' => 'value1',
    'query_var2' => 'value2',
  ), 'admin-ajax.php'); ?>
);
<?php
...

E in JavaScript non è affatto valido in quanto non possiamo usare add_query_arg


Dov'è diverso dalla soluzione a parte il fatto che contiene i <?php ?>tag? Se questo è tutto ciò che vuoi sottolineare, ti preghiamo di apportare una modifica alla soluzione per correggerla. Non è necessario aggiungere una risposta separata per spiegare cosa non va in un'altra risposta. Ecco perché le modifiche della community sono apprezzate.
Kaiser

@kaiser Le modifiche che cambiano il significato di un post di solito non sono benvenute. Come risposta separata va bene.
fuxia

@toscho E come sta cambiando esattamente il significato ? Imo sta correggendo o aggiungendo i bit mancanti .
Kaiser

Bayen aveva ragione nel sottolineare l'errore qui, stavo mescolando PHP e Javascript, avrei dovuto individuarlo prima. Ho apportato le modifiche necessarie alla mia risposta e grazie per il feedback bayen (mi piace sapere quando commetto errori).
t31os,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.