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

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

Понравилась статья? Поделиться с друзьями:
WPAsk
Ответов: 1
  1. Bainternet

    «более безопасный и чистый» способ — использовать admin-ajax.php, поставляемый с wordpress и хуком wp_ajax , чтобы вызвать функцию обработки из файла плагина и использовать 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' ); ?>'
    
        };
    
       
        jQuery.post(ajaxurl, data, function(response) {
            alert('Got this from the server: ' + response);
        });
    });
    </script>
    

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

    //если вы хотите, чтобы только зарегистрированные пользователи получили доступ к этой функции, используйте этот хук
    add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');
    
    //если вы хотите, чтобы никто не вошел в систему для доступа к этой функции, используйте этот хук
    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');
       
    }
    

    Надеюсь, что помогло

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: