AJAX запросы в WordPress с помощью admin-ajax.php

В WordPress с каждым обновлением на AJAX вешают все больше функционала. А знаете ли вы, что тоже можете пользоваться этими решениями в разработке тем и плагинов?


Чем объяснять, лучше покажу:

<?php
add_action('wp_footer', 'ajax__example', 99);

function ajax__example() {
?>
    <script type="text/javascript" >
        jQuery(document).ready(function() {
            jQuery('#ajax__say_hello').click( function(e) {
                e.preventDefault();

                var data    = { action  : 'example' };

                jQuery.post( <?php echo site_url();?>'/wp-admin/admin-ajax.php', data, function(response) {

                    if( response == "done" ) {
                        alert("Hello!");
                    }
                    else if( response == "empty" ) {
                        console.log("Sorry, we have some problems...")
                    }
                });
            });
        });
    </script>
    <?php
}

/*  
 *  wp_ajax_#CALLBACK# - это обработчик для АВТОРИЗОВАНЫХ пользователей
 *  wp_ajax_nopriv_#CALLBACK# - это обработчик для НЕ АВТОРИЗОВАНЫХ пользователей
 *  #CALLBACK# обязательно должен совпадать с передаваемым параметром ACTION!
 */

add_action('wp_ajax_example', 'example_callback');
add_action('wp_ajax_nopriv_example', 'example_callback');

function example_callback() {

    if( $_POST["action"] == "example" )
        echo "done";
    else
        echo "empty";
    wp_die();
}

Нам нужно:

  1. Функция, которая будет выводить JS код;
  2. Функция, которая будет обрабатывать запросы для авторизованных пользователей;
  3. Функция, которая будет обрабатывать запросы от не авторизованных пользователей.

Последние две могут быть одной функцией.

Поле

action

обязательно должно быть и передаваться в обработчик!

Пишите на почту или в комментарии, если надо подробно прокомментировать какую-нибудь строчку.


EnglishRussianUkrainian