Пишу в блог, щоб не забути, та і моїм читачам буде цікаво…

Реалізація AJAX в плагінах/темах

Реалізація AJAX’а за допомогою jQuery для версій WordPress починаючи з 2.6 за поточну:

/**
* Реєструємо змінні фільтра “query_vars”
*
* @param array $vars
* @return array
*/
function plugin_query_vars($vars) {
$vars[] = ‘plugin_query’;
return $vars;
}
add_filter(‘query_vars’, ‘plugin_query_vars’);
/**
* Парсим запит і щось робимо
*
* @param $wp
*/
function plugin_parse_request($wp) {
// що робимо якщо присутній перменная “plugin_query” в запиті
if (array_key_exists(‘plugin_query’, $wp->query_vars)){
switch ($wp->query_vars[‘plugin_query’]) {
case ‘option1’:
// що робимо
break;
case ‘option2’:
// робимо щось інше
break;
}
// die – щоб запобігти подальшу роботу WP
die();
}
}
// регестрируемся на хук wp
add_action(‘wp’, ‘plugin_parse_request’);
// не забуваємо підключити jQuery
wp_enqueue_script(‘jquery’);

HTML частина буде виглядати наступним чином:

AJAX Link

Безпосередній виклик:

jQuery(document).ready(function($) {
// AJAX Link
$(‘#ajax’).click(function(){
var data = {
‘plugin_query’:’option1′
};
$.post($(this).attr(“href”), data, function(response){
// response …
});
return false;
});
});

Реалізація AJAX для адмін панелі

З адмінкою все на порядок простіше, необхідно зробити следующии маніпуляції в плагіні:

// функція яка повертає щось…
function my_special_action() {
// що робимо і що-то повертаємо
$whatever = $_POST[‘whatever’];
$whatever += 10;
echo $whatever;
// “вмираємо”
die;
}
// хук виду wp_ajax_***
add_action(‘wp_ajax_my_special_action’, ‘my_special_action’ );

Посилання:

AJAX Link

JavaScript для виклику функції my_special_action:

jQuery(document).ready(function($) {
$(‘#ajax’).click(function(){
var data = {
action: ‘my_special_action’,
whatever: 1234
};
$.post(ajaxurl, data, function(response){
// response …
alert(‘Сервер нам відповів:’ + response);
});
return false;
});
});

Для WordPress з версії 2.8 з’явився новий хук “wp_ajax_nopriv_my_action”:

// залогиненный користувач
add_action(‘wp_ajax_my_action’, ‘my_action_callback’);
// гість
add_action(‘wp_ajax_nopriv_my_action’, ‘my_action_callback’);

Отримати список файлів приаттаченных до посту

ID.’&post_type=attachment’);
if ($attachment) :?>

Сумісність версій

Якщо треба підтримувати старі версії wordpress’а:

if (version_compare($wp_version, ‘2.8’, ‘<’)) {
// пишемо функції для зворотного своместимости
}

Якщо треба підтримувати PHP 4-ої версії (файли беремо з пакету PEAR::PHP_Compat):

if (version_compare(phpversion(), ‘5.0.0’, ‘<’)) {
require_once ‘compatibility/scandir.php’;
require_once ‘compatibility/file_put_contents.php’;
require_once ‘compatibility/file_get_contents.php’;
}

Посилання по темі

  • AJAX in Plugins
  • jQuery and Ajax in WordPress Plugins – Public Pages
  • jQuery and Ajax in WordPress Plugins – Administration Pages