Me pregunto si alguien podría aconsejarme más sobre mi problema. Parte de mi complemento almacena archivos de registro con fines de depuración. Los he mostrado con éxito en un (div # log) en mi página de administración usando jquery y wp_localise_script. Tengo un botón para eliminar estos registros, pero no estoy seguro de cómo procesar esto. Tengo la sensación de que ajax podría ser útil aquí, pero no estoy seguro de por dónde empezar.
Aquí están las partes relevantes de mi código:
admin_enqueue_scripts (acción)
$args = array(get_option('wow_tweets_log'));//log files fetched from wp_options table
wp_enqueue_script('wow_tweet');//registered earlier on with jQuery dependency
wp_localize_script('wow_tweet', 'wow_vars', $args);
Página de administrador
<tr><th scope="row"><strong>Debugging</strong></th><td>
<div id="debug" class="button-primary">Debug</div><!--debug button shows logs-->
<div id="hide_debug" class="button-secondary">Hide</div><!--debug button hides logs-->
<div id="clear_log" class="button-secondary">Empty Log</div><!--Press to delete logs-->
</td></tr>
<tr><th scope="row"></th><td><div id="log"><!--Logs show here--></div></td></tr>
Javascript
jQuery(document).ready(function() {
var debug_show = jQuery('#log').hide();//hides log by default
jQuery('#debug').click(function(){//on click shows logs files in div#log
for (var i = 0, l = wow_vars.length; i < l; i++) {
var data = wow_vars[i];
}
jQuery('#log').show().html(data);
});
jQuery('#hide_debug').click(function()
{
debug_show.hide();
});
});
Acción para borrar el registro
function clear_log(){
delete_option('wow_tweets_log');//am stuck on how to invoke this
/*die(); would go at the end if ajax used*/
}
add_action('clear_log','clear_log');
Hasta ahora, este script está trabajando para mostrar todos los archivos de registro, ahora todo lo que necesito es eliminarlos al hacer clic en #clear_log. Sé que conectar un do_action en init los eliminará tan pronto como se cargue la página, haciendo que mi javascript sea inútil, ¡así que supongo que la única opción es ajax! ¿Necesito agregar otra referencia a wp_localize_script ()? Cualquier ayuda sería apreciada.
Respuestas:
Ajax en WordPress funciona enviando una publicación HTTP a /wp-admin/admin-ajax.php (por defecto) que luego activa el enlace correspondiente. Entonces, adjuntas un poco de jquery a un evento activado por tu botón de eliminación, que luego se publica en admin-ajax.php, que tiene una acción, por ejemplo, delete_my_options (), que realmente ejecuta el php para eliminar. Luego, tiene una función, llamada devolución de llamada, que se ejecuta al completar con éxito la solicitud ajax. Podría usar esto para desvanecer su #log div, por ejemplo.
En resumen, tiene tres pasos, la acción, el ajax y la devolución de llamada. La acción se desencadena por un evento DOM y se adjunta a dos ganchos, wp_ajax_ {action_name} y wp_ajax_nopriv_ {action_name} (solo si no desea que ningún usuario conectado pueda hacerlo). Estos disparan cuando esa acción se publica en wp-admin / admin-ajax.php. El ajax es la función php (generalmente) conectada a ellos. La función de devolución de llamada es una función de JavaScript que se activa cuando el ajax se completa con éxito.
Paso a paso:
Paso 1, en tu archivo js
Paso 2, en tu functions.php o un complemento
Agregue esto a la función de la que obtiene su javascript: (gracias @Milo)
Luego agregue esto a su functions.php o plugin:
Paso 3, de vuelta en tu archivo js
fuente
admin_url
conwp_localize_script
la salida de laadmin-ajax.php
URL, no es'/wp-admin/admin-ajax.php'
en muchos casos, dependiendo de la instalación específicos.wp_ajax_nopriv_clear_log_action
. ¿Por qué se debe permitir a cualquier visitante borrar el registro? :)