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

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:


¿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


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


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.