Пишу в блог, чтобы не забыть, да и моим читателем будет интересно…
Реализация 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 часть будет выглядеть следующим образом:
<a href="<?php echo get_bloginfo('wpurl') ?>" id="ajax">AJAX Link</a>
Непосредственный вызов:
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' );
Ссылка:
<a href="<?php echo get_bloginfo('wpurl') ?>" id="ajax">AJAX Link</a>
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');
Получить список файлов приаттаченных к посту
<?php $attachment = get_children('post_parent='.$post->ID.'&post_type=attachment'); if ($attachment) :?> <div class="attachment"> <ul> <?php foreach ($attachment as $file) : ?> <li><a href="<?php echo $file->guid ?>" title="<?php echo $file->post_title ?>"><?php echo $file->post_title ?></a></li> <?php endforeach; ?> </ul> </div> <?php endif;?>
Совместимость версий
Если надо поддерживать старые версии 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'; }
Хе-хе, попробуем как это применить в своем плагинчике.
Кстати, ваш Syntax highlighter офигенен :)
Прикольно. Спасибо за пост.
эм… а зач так?
поч не прописать в начале где путь к js в шаблоне, и все?!
на пример для форм =\
все всегда работала отлично.