Abra un Thickbox con contenido a través de AJAX

10

Agregué un botón personalizado al editor TinyMCE, y quiero abrir Thickbox de WP cuando hago clic en él.

¿Cómo puedo hacer que la función tb_show() cargue el contenido que quiero con ajax?

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

Aquí está el código del complemento del editor que estoy usando:

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

Entonces la función OpenMyThickbox javascript debería hacer lo que quiero:

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

2 respuestas

6

El segundo parámetro para tb_show es la URL, así que querrás 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; ?> ); 

Supongo que necesita pasar la acción y cualquier vars de consulta manualmente (como se indica anteriormente), de lo contrario, su solicitud es simplemente para admin-ajax.php , cuando lo que está buscando es algo como ... admin-ajax.php?action=getTheContent&someothervar=someothervalue , por lo tanto, el add_query_arg de uso arriba ..

Para aclaraciones:

La siguiente llamada a add_query_arg ...

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

Es equivalente y producirá ...

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

¡Sin embargo!

Habiéndome explicado ahora mismo, me he dado cuenta de que no queremos la URL absoluta y, por lo tanto, no necesitamos la llamada a admin_url allí. El código debería ser en su lugar.

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

Entonces, la URL resultante se parece a esto ...

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

Funciones a las que se hace referencia en los ejemplos de código anteriores:

respondido por el t31os 18.04.2011 - 13:35
3

Desordenar javascript y PHP no es muy inteligente. Esta respuesta solo confunde.

tb_show es javascript add_query_arg es PHP

por lo que esta solución solo es válida en PHP y el código correcto es

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

Y en javascript no es válido en absoluto ya que no podemos usar add_query_arg

    
respondido por el bayen 05.12.2012 - 13:32

Lea otras preguntas en las etiquetas