Abra un Thickbox con contenido a través de AJAX

11

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

¿Cómo puedo hacer que la tb_show()función 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í hay algunos de los códigos de complementos 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 OpenMyThickboxfunción javascript debería hacer lo que quiero:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
Pony de un solo truco
fuente
use admin_url ('admin-ajax.php'); para url
Bainternet
Me sale una página en blanco. incluso si entro en google.com
onetrickpony

Respuestas:

6

El segundo parámetro para tb_showes la URL, por lo que querrá 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 debe pasar la acción y cualquier consulta adicional de forma manual (según lo anterior), de lo contrario, su solicitud es simplemente para admin-ajax.php, cuando lo que está buscando es algo similar a ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, de ahí el add_query_arguso anterior. .

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!

Después de haberme explicado, me he dado cuenta de que no queremos la URL absoluta y, por lo tanto, no necesitamos la llamada admin_urlallí. 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:

t31os
fuente
¿No será eso $_get['action']porque se busca la llamada ajax de WordPress $_post['action']? o estoy equivocado?
Bainternet
Por lo general, será $_POSTo $_REQUESTdentro de una devolución de llamada ajax, a menos que establezca explícitamente su función de solicitud de ajax para usar geten su lugar, en el contexto de una llamada de caja gruesa, usamos una cadena de consulta, que aún debería aparecer en $_REQUEST(porque eso generalmente contiene ambos $_GETy $_POST) ..
t31os
No, lo que pregunto es si uso ¿se add_query_argenviarán los argumentos agregados como una publicación o recibo?
Bainternet
Ninguno de los dos, add_query_argse anexa una cadena (de una URL) con parámetros de consulta, no se hace ningún envío, así que no estoy seguro de entender su pregunta ..
t31os
Actualicé
3

Desorganizar JavaScript y PHP no es muy inteligente. Esta respuesta solo confunde.

tb_show es javascript add_query_arg es PHP

entonces esta solución solo es válida en PHP y el código apropiado 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 ya que no podemos usar add_query_arg

bayen
fuente
¿Dónde es eso diferente de la solución aparte de que tiene las <?php ?>etiquetas? Si eso es todo lo que desea señalar, edite la solución para corregirlo. No es necesario agregar una respuesta separada para explicar lo que está mal con otra respuesta. Es por eso que las ediciones de la comunidad son apreciadas.
kaiser
@kaiser Las ediciones que cambian el significado de una publicación generalmente no son bienvenidas. Como respuesta separada, está bien.
fuxia
@toscho ¿Y cómo exactamente esto está cambiando el significado ? Imo está corrigiendo o agregando los bits faltantes .
kaiser
Bayen tenía razón al señalar el error aquí, estaba mezclando PHP y Javascript, realmente debería haberlo visto antes. He realizado los cambios necesarios en mi respuesta, y gracias por los comentarios recibidos (me gusta saber cuándo cometo errores).
t31os