Интересно, кто-нибудь мог бы посоветовать мне дальше по моей проблеме. Часть моего плагина хранит файлы журналов для целей отладки. Я успешно отобразил их в (div # log) на моей странице администратора, используя jquery и wp_localise_script. У меня есть кнопка, чтобы удалить эти журналы, но я не уверен, как это обработать. У меня есть ощущение, что Ajax может пригодиться здесь, но не знаю, с чего начать.
Вот соответствующие части моего кода:
admin_enqueue_scripts (действие)
$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);
Страница администратора
<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();
});
});
Действие для очистки журнала
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');
Пока этот скрипт работает, чтобы показать все файлы журнала, теперь все, что мне нужно, это удалить их при нажатии #clear_log. Я знаю, что подключение do_action к init удалит их, как только загрузится страница, что сделает мой javascript бесполезным, поэтому я предполагаю, что единственным вариантом является ajax! Нужно ли добавить еще одну ссылку на wp_localize_script ()? Любая помощь будет оценена.
Ответы:
Ajax в WordPress работает, отправляя сообщение HTTP в /wp-admin/admin-ajax.php (по умолчанию), которое затем запускает соответствующий хук. Итак, вы присоединяете некоторый jquery к событию, вызываемому вашей кнопкой удаления, которая затем отправляет сообщение в admin-ajax.php, у которого есть действие, скажем, delete_my_options (), которое фактически запускает php для удаления. Затем у вас есть функция, называемая обратным вызовом, которая запускается при успешном завершении запроса ajax. Вы можете использовать это, например, для исчезновения вашего #log div.
Короче говоря, у вас есть три шага: действие, ajax и обратный вызов. Действие запускается событием DOM и прикрепляется к двум хукам, wp_ajax_ {action_name} и wp_ajax_nopriv_ {action_name} (только если вы не хотите, чтобы это делали зарегистрированные пользователи). Они запускаются, когда это действие публикуется в wp-admin / admin-ajax.php. Ajax - это функция php (обычно), подключенная к ним. Функция обратного вызова - это функция javascript, которая запускается при успешном завершении ajax.
Шаг за шагом:
Шаг 1, в вашем файле JS
Шаг 2, в вашем functions.php или плагине
Добавьте это к функции, из которой вы ставите свой javascript в очередь: (спасибо @Milo)
Затем добавьте это в ваш functions.php или плагин:
Шаг 3, вернитесь в ваш файл js
источник
admin_url
сwp_localize_script
для выводаadmin-ajax.php
URL, это не'/wp-admin/admin-ajax.php'
во многих случаях, в зависимости от установки конкретики.wp_ajax_nopriv_clear_log_action
. Почему любой посетитель должен иметь возможность очистить журнал? :)