Zastanawiam się, czy ktokolwiek mógłby mi doradzić w sprawie mojego problemu. Część mojej wtyczki przechowuje pliki dziennika do celów debugowania. Udało mi się wyświetlić je w (div # log) na mojej stronie administratora przy użyciu jquery i wp_localise_script. Mam przycisk do usunięcia tych dzienników, ale nie jestem pewien, jak to przetworzyć. Mam wrażenie, że ajax może się tu przydać, ale nie jestem pewien, od czego zacząć.
Oto odpowiednie części mojego kodu:
admin_enqueue_scripts (akcja)
$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);
Strona administratora
<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();
});
});
Działanie w celu wyczyszczenia dziennika
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');
Jak dotąd ten skrypt działa, aby wyświetlić wszystkie pliki dziennika, teraz wystarczy, że je usunę, klikając #clear_log. Wiem, że podłączenie do okazji do init usunie je, gdy tylko strona się załaduje, dzięki czemu mój javascript będzie bezużyteczny, więc sądzę, że jedyną opcją jest ajax! Czy muszę dodać kolejne odwołanie do wp_localize_script ()? Każda pomoc będzie mile widziana.
Odpowiedzi:
Ajax w WordPress działa, wysyłając post HTTP do /wp-admin/admin-ajax.php (domyślnie), który następnie odpala odpowiedni hak. Tak więc dołączasz trochę jquery do zdarzenia wywołanego przez twój przycisk usuwania, który następnie publikuje na admin-ajax.php, który ma akcję, powiedzmy, delete_my_options (), która faktycznie uruchamia php do usunięcia. Następnie masz funkcję o nazwie callback, która działa po pomyślnym zakończeniu żądania ajax. Możesz to wykorzystać na przykład do zaniknięcia swojego #log div.
Krótko mówiąc, masz trzy kroki: akcję, ajax i wywołanie zwrotne. Akcja jest wyzwalana przez zdarzenie DOM i dołączona do dwóch podpórek, wp_ajax_ {nazwa_działania} i wp_ajax_nopriv_ {nazwa_działania} (tylko jeśli nie chcesz, aby zalogowani użytkownicy mogli to zrobić). Uruchamiają się, gdy akcja zostanie wysłana do wp-admin / admin-ajax.php. Ajax jest podpiętą do nich funkcją php (zwykle). Funkcja zwrotna to funkcja javascript, która jest uruchamiana po pomyślnym ukończeniu ajax.
Krok po kroku:
Krok 1, w pliku js
Krok 2, w pliku functions.php lub we wtyczce
Dodaj to do funkcji, z której kolejkujesz swój javascript: (dzięki @Milo)
Następnie dodaj to do swojego functions.php lub wtyczki:
Krok 3, z powrotem w pliku js
źródło
admin_url
wwp_localize_script
celu wyjścia zadmin-ajax.php
URL, nie jest to'/wp-admin/admin-ajax.php'
w wielu przypadkach, w zależności od specyfiki zainstalować.wp_ajax_nopriv_clear_log_action
. Dlaczego każdy odwiedzający powinien mieć możliwość wyczyszczenia dziennika? :)