Abra uma caixa grossa com conteúdo através do AJAX

11

Adicionei um botão personalizado ao editor TinyMCE e quero abrir a caixa de espessura do WP quando clicar nela.

Como posso fazer com que a tb_show()função 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();
}

Aqui estão alguns dos códigos de 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 OpenMyThickboxfunção javascript deve fazer o que eu quero:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
onetrickpony
fonte
use admin_url ('admin-ajax.php'); para url
Bainternet
Eu recebo uma página em branco. mesmo se eu entrar google.com
onetrickpony

Respostas:

6

O segundo parâmetro para tb_showé a URL, então você deve 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 todos os vars de consulta adicionais manualmente (conforme descrito acima); caso contrário, sua solicitação é simplesmente admin-ajax.phpquando o que você está procurando é algo parecido com ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, daí o add_query_arguso acima. .

Para esclarecimentos:

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

Contudo!

Tendo me explicado agora, percebi que não queremos a URL absoluta e, portanto, não precisamos da ligação admin_url. O código deveria ser.

<?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 se parece com isso ..

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

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

t31os
fonte
Isso não acontece $_get['action']porque a chamada ajax do WordPress procura $_post['action']? ou eu estou errado?
Bainternet
Normalmente, ele estará $_POSTou $_REQUESTdentro de um retorno de chamada ajax, a menos que você defina explicitamente sua função de solicitação ajax get, no contexto de uma chamada thickbox, usamos uma string de consulta, que ainda deve aparecer $_REQUEST(porque geralmente contém ambos $_GETe $_POST) ..
t31os
Não, o que estou perguntando é que, se eu usar add_query_arg, os argumentos adicionados serão enviados como uma postagem ou serão obtidos?
Bainternet
Nem, add_query_argacrescenta um string (de um url) com parâmetros de consulta, ele não faz qualquer envio, então eu não tenho certeza se entendi sua pergunta ..
t31os
Atualizado minha resposta ..
t31os 18/04/11
3

Desarrumar o javascript e o PHP não é muito inteligente. Esta resposta apenas confunde.

tb_show é javascript add_query_arg é PHP

portanto, esta solução é válida apenas em PHP e o código adequado é

...
?>
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

Bayen
fonte
Onde isso é diferente da solução, além de conter as <?php ?>tags? Se é isso que você quer destacar, faça uma edição na solução para corrigi-la. Não é necessário adicionar uma resposta separada para explicar o que há de errado com outra resposta. É por isso que as edições da comunidade são apreciadas.
Kaiser
As edições do @kaiser que alteram o significado de uma postagem geralmente não são bem-vindas. Como resposta separada, tudo bem.
fuxia
@toscho E como exatamente isso está mudando o significado ? Imo está corrigindo ou adicionando os bits ausentes .
Kaiser
Bayen estava correto ao apontar o erro aqui, eu estava misturando PHP e Javascript, eu realmente deveria ter percebido isso antes. Fiz as alterações necessárias na minha resposta e obrigado pelo feedback bayen (gosto de saber quando cometo erros).
t31os