Je me demande si quelqu'un pourrait me conseiller davantage sur mon problème. Une partie de mon plugin stocke des fichiers journaux à des fins de débogage. J'ai réussi à les afficher dans un (div # log) dans ma page d'administration en utilisant jquery et wp_localise_script. J'ai un bouton pour supprimer ces journaux mais je ne sais pas comment traiter cela. J'ai le sentiment que l'ajax pourrait être utile ici, mais je ne sais pas par où commencer.
Voici les parties pertinentes de mon code:
admin_enqueue_scripts (action)
$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);
Page Admin
<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();
});
});
Action pour effacer le journal
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');
Jusqu'à présent, ce script fonctionne pour afficher tous les fichiers journaux, maintenant tout ce dont j'ai besoin est de les supprimer en cliquant sur #clear_log. Je sais que brancher une do_action sur init les supprimera dès que la page se chargera, rendant mon javascript inutile donc je suppose que la seule option est ajax! Dois-je ajouter une autre référence à wp_localize_script ()? Toute aide serait appréciée.
Réponses:
Ajax dans WordPress fonctionne en envoyant une publication HTTP à /wp-admin/admin-ajax.php (par défaut) qui déclenche ensuite le hook correspondant. Donc, vous attachez une requête jquery à un événement déclenché par votre bouton de suppression, qui est ensuite publié dans admin-ajax.php, qui a une action, par exemple, delete_my_options (), qui exécute en fait le php à supprimer. Ensuite, vous disposez d'une fonction, appelée rappel, qui s'exécute lorsque la requête ajax est terminée avec succès. Vous pouvez l'utiliser pour atténuer votre div #log par exemple.
En bref, vous avez trois étapes, l'action, l'ajax et le rappel. L'action est déclenchée par un événement DOM et attachée à deux crochets, wp_ajax_ {nom_action} et wp_ajax_nopriv_ {nom_action} (uniquement si vous ne souhaitez pas que des utilisateurs connectés puissent le faire). Ceux-ci se déclenchent lorsque cette action est publiée sur wp-admin / admin-ajax.php. L'ajax est la fonction php (généralement) qui leur est liée. La fonction de rappel est une fonction javascript qui est déclenchée lorsque l'ajax est terminé avec succès.
Pas à pas:
Étape 1, dans votre fichier js
Étape 2, dans votre functions.php ou un plugin
Ajoutez ceci à la fonction à partir de laquelle vous mettez en file d'attente votre javascript: (merci @Milo)
Ajoutez ensuite ceci à votre functions.php ou plugin:
Étape 3, de retour dans votre fichier js
la source
admin_url
avecwp_localize_script
pour sortir l'admin-ajax.php
URL, ce n'est pas'/wp-admin/admin-ajax.php'
dans de nombreux cas, selon les spécificités de l'installation.wp_ajax_nopriv_clear_log_action
. Pourquoi un visiteur devrait-il être autorisé à effacer le journal? :)