Abra um Thickbox com conteúdo através do AJAX

10

Eu adicionei um botão personalizado ao editor do TinyMCE, e quero abrir o Thickbox do WP quando clico nele.

Como posso fazer com que a função tb_show() carregue o conteúdo que eu quero com o ajax?

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

Veja alguns dos códigos do plug-in do editor que estou usando:

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

Portanto, a função OpenMyThickbox javascript deve fazer o que eu quero:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
    
por onetrickpony 18.04.2011 / 06:44

2 respostas

6

O segundo parâmetro para tb_show é o URL, então você vai querer usar algo como ..

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

Eu acho que você precisa passar a ação e qualquer consulta adicional vars manualmente (conforme acima), senão o seu pedido é simplesmente para admin-ajax.php , quando o que você está procurando é algo semelhante ... admin-ajax.php?action=getTheContent&someothervar=someothervalue , daí o uso de add_query_arg acima ..

Para esclarecimento:

A seguinte chamada para add_query_arg ...

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

É equivalente e produzirá ...

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

No entanto!

Depois de me explicar, percebi que não queremos o URL absoluto e, portanto, não precisamos da chamada para admin_url . O código deve ser em vez disso.

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

Portanto, o URL resultante é algo como isto ...

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

Funções referenciadas nos exemplos de código acima:

por t31os 18.04.2011 / 13:35
3

Desordenar o javascript e o PHP não é muito inteligente. Essa resposta apenas confunde.

tb_show é javascript add_query_arg é PHP

então esta solução só é válida em PHP e o código correto é

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

E em javascript não é válido, pois não podemos usar add_query_arg

    
por bayen 05.12.2012 / 13:32