Ajax запросы в при содании плагиина для WordPress

Сегодня расскажу как выполнять Ajax запросы при разработке плагина под Wordpress.

Как я понял есть 2 пути: простой, но не верный, и чуток посложнее, но зато правильный.

Простой путь

С помощью JQuery выполняем ajax запрос к нужному нам файлу на сервере (к примеру в папке с нашим плагином).

Реализация ничем не отличается стандартной:

 $.ajax({
 url: "/wp-content/plugins/test/test.php",
 data: {
 id: "1",
 }
 }).done(function ( data ) {
 alert("выполнили!");
 });

Минусы этой реализации — у вас нет доступа ко всем возможностям вордпресса — работа с бд, записями, и всем прочим. Что-бы все работало корректно необходимо воспользоваться правильным способом)

Правильный путь

Все Ajax запросы выполняются через специальный файл WordPress, который сначала инициализирет все возможности CMS, а потом уже вызывает функцию, которая нам необходима.

Зарегистрируем обработчик функции

Перед вызовом функции, ее необходимо зарегистрировать, что бы система знала что именно мы от нее хотим.

Для этого в файле нашего плагина регистрируем обработчики событий для наших функций. Для каждой по 2 штуки.

Зачем по 2? Один — если пользователь незалогинен на сайте, второй если залогинен.

То есть если мы зарегистрирем обрабочик «wp_ajax_***», то можем к нему достучаться когда авторизуемся на сайте.

add_action('wp_ajax_vote', 'ajax_test');
add_action( 'wp_ajax_nopriv_vote', 'ajax_test' );

Функция-обрабочик ‘ajax_test’ указывается одна и та-же.

Создаем функцию для обработки запроса.

Это обычная php функция без параметров, которая будет вызываться WordPress’ом после инициализации ядра cms.

Передаваемые параметры достаем из массива $_GET или $_POST.
В этой функции мы можем работать с бд, и использовать все функции WordPress.
Пример:

function ajax_test () {
  $id = (int)$_GET['id'];

  global $wpdb;

  $r = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}test WHERE post_id = '{$post_id}';" );
  die (json_encode( array('res'=>'1') ) ); // data readed
}

Теперь рассмотрим javascript код для выполнения Ajax запроса к WordPress плагину.

Для работы нам понадобится подключенная библиотека JQuery.

// get data
function get_id(id, revote) {
	// Выполним json запрос к нашему плагину
	// в параметр action action передаем параметр,
        //который у нас идет после wp_ajax_ в строке выше, где add_action
	jQuery.getJSON(
		'/wp-admin/admin-ajax.php',
		{ 'action':'vote', 'id':'1' },
		function(data) {
		// Функция выполняется после выполнения
			if (data['res'] == 1){
			alert('all ok');
			}
			else if (data['res'] !== 1) // Error
			{
			//alert('some problem');
			}
		}
	});
}

Задавайте ваши вопросы в комментариях, может не все моменты я осветил, или что-то не получается.
Может стоит создать файл плагина-примера? Пока лень, но если буду желающие, могу помочь)