Ich frage mich, ob mich jemand zu meinem Problem weiter beraten könnte. Ein Teil meines Plugins speichert Protokolldateien für Debugging-Zwecke. Ich habe sie erfolgreich in einem (div # log) auf meiner Admin-Seite mit jquery und wp_localise_script angezeigt. Ich habe eine Schaltfläche zum Löschen dieser Protokolle, bin mir jedoch nicht sicher, wie ich das verarbeiten soll. Ich habe das Gefühl, dass Ajax hier nützlich sein könnte, bin mir aber nicht sicher, wo ich anfangen soll.
Hier sind die relevanten Teile meines Codes:
admin_enqueue_scripts (Aktion)
$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);
Administrator Seite
<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();
});
});
Aktion zum Löschen des Protokolls
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');
Bisher zeigt dieses Skript alle Protokolldateien an. Jetzt muss ich sie nur noch löschen, wenn ich auf #clear_log klicke. Ich weiß, dass durch das Einfügen einer do_action in init diese gelöscht werden, sobald die Seite geladen wird, wodurch mein Javascript unbrauchbar wird. Ich denke, die einzige Option ist Ajax! Muss ich einen weiteren Verweis auf wp_localize_script () hinzufügen? Jede Hilfe wäre dankbar.
Antworten:
Ajax in WordPress sendet einen HTTP-Beitrag an /wp-admin/admin-ajax.php (standardmäßig), der dann den entsprechenden Hook auslöst. Sie hängen also eine Abfrage an ein Ereignis an, das von Ihrer Löschtaste ausgelöst wird. Diese wird dann in admin-ajax.php veröffentlicht, das eine Aktion enthält, z. B. delete_my_options (), mit der das zu löschende PHP ausgeführt wird. Dann haben Sie eine Funktion, die als Rückruf bezeichnet wird und nach erfolgreichem Abschluss der Ajax-Anforderung ausgeführt wird. Sie können dies beispielsweise verwenden, um Ihr # log div auszublenden.
Kurz gesagt, Sie haben drei Schritte: die Aktion, den Ajax und den Rückruf. Die Aktion wird durch ein DOM-Ereignis ausgelöst und an zwei Hooks angehängt, wp_ajax_ {Aktionsname} und wp_ajax_nopriv_ {Aktionsname} (nur wenn Sie möchten, dass keine angemeldeten Benutzer dies tun können). Diese werden ausgelöst, wenn diese Aktion in wp-admin / admin-ajax.php veröffentlicht wird. Der Ajax ist die (normalerweise) mit ihnen verbundene PHP-Funktion. Die Rückruffunktion ist eine Javascript-Funktion, die ausgelöst wird, wenn der Ajax erfolgreich abgeschlossen wurde.
Schritt für Schritt:
Schritt 1 in Ihrer js-Datei
Schritt 2, in Ihrer functions.php oder einem Plugin
Fügen Sie dies zu der Funktion hinzu, von der Sie Ihr Javascript in die Warteschlange stellen: (danke @Milo)
Dann füge dies deiner functions.php oder deinem Plugin hinzu:
Schritt 3, zurück in Ihre js-Datei
quelle
admin_url
mit,wp_localize_script
um dieadmin-ajax.php
URL auszugeben. Dies ist'/wp-admin/admin-ajax.php'
in vielen Fällen nicht der Fall, abhängig von den Installationsspezifikationen.wp_ajax_nopriv_clear_log_action
. Warum sollte ein Besucher das Protokoll löschen dürfen? :)