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

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:


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.