Какой метод написания плагинов с поддержкой AJAX является предпочтительным?

49

Мне интересно, какой предпочтительный метод для обработки вызовов AJAX. Нужно ли использовать один и тот же php-файл плагина для обработки POST или отдельный? Что чище или безопаснее?

Джеймс
источник

Ответы:

47

«более безопасный и чистый» способ - использовать admin-ajax.php, поставляемый с wordpress и wp_ajaxhook, для вызова вашей функции обработки из файла плагина и использования wp-nonce для проверки целостности вызова.

например:

Ваш вызов ajax JQuery будет

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        action: 'ACTION_NAME',
            Whatever: '1234',
            _ajax_nonce: '<?php echo wp_create_nonce( 'my_ajax_nonce' ); ?>'

    };

    // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
    // If you need it on a public facing page, uncomment the following line:
    // var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});
</script>

затем в вашем файле плагина добавить

//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');

//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');

* если вы хотите, чтобы вошедшие в систему пользователи и гости имели доступ к вашей функции с помощью ajax, добавьте обе функции. * ACTION_NAME должен соответствовать значению действия в вашем ajax POST.

тогда в вашей функции просто убедитесь, что запрос пришел из действительного источника

function my_AJAX_processing_function(){
   check_ajax_referer('my_ajax_nonce');
   //do stuff here...
}

Надеюсь это поможет

Bainternet
источник
1
Эта реализация хороша только для админки? А как насчет пользователя? Я хочу спрятать / wp-admin / и изменить URL-адрес администратора, поэтому запрос к скрытому URL-адресу будет не очень хорошим
inferusvv