Как получить Ajax в тему – без написания плагина?

Хорошо, я начинаю работу с некоторыми материалами AJAX в теме WordPress

1) Я создаю дочернюю тему в тематической структуре. 2) Моя дочерняя тема имеет header.php, index.php, functions.php и style.css (на этом этапе)

В моем header.php у меня есть следующее (кстати, код адаптирован из http://codex.wordpress.org/AJAX_in_Plugins ):

<?php if( !is_admin() ) { add_action('wp_ajax_my_special_action', 'my_action_callback'); add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback'); $_ajax = admin_url('admin-ajax.php'); } ?> <script type="text/javascript" > jQuery(document).ready(function($) { var data = { action: 'my_special_action', whatever: 1234 }; jQuery.post('<?php echo($_ajax); ?>', data, function(response) { jQuery('#output').html('Got this from the server: ' + response); }); }); </script> </head> 

Правильно, так что все круто – и он обновляет div OUTPUT на странице с помощью «Получил это с сервера: 0»

Мне нужна функция PHP, называемая «my_action_callback», поэтому в функции functions.php моей темы есть следующее:

 function my_action_callback() { $whatever = $_POST['whatever']; $whatever += 10; echo 'whatever now equals: ' . $whatever; die(); } другой function my_action_callback() { $whatever = $_POST['whatever']; $whatever += 10; echo 'whatever now equals: ' . $whatever; die(); } 

Это единственная функция в моих functions.php

Чтобы убедиться, что функция PHP работает, я вставляю my_action_callback () в свой index.php – и он выводит «все, что сейчас равно: 10», как и ожидалось.

ОДНАКО – ответ AJAX всегда «Получил это от сервера: 0» Ajax никогда не получает ответа от функции PHP.

Я попытался добавить .ajaxError (), чтобы увидеть, были ли какие-либо ошибки – нет.

Я попытался добавить функции PHP к другому плагину моего – нет.

Что мне не хватает, что jQuery не делает бит ajax для меня?

заранее спасибо

Поместите эти функции add_action в файл functions.php . Если они находятся в header.php , WordPress никогда не регистрирует их, поскольку заголовок не загружается в AJAX. Кроме того, вам не нужна эта is_admin() . Заголовок заголовка никогда не будет загружаться в admin. Итак, ваш файл функций должен выглядеть так:

 add_action('wp_ajax_my_special_action', 'my_action_callback'); add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback'); function my_action_callback() { $whatever = $_POST['whatever']; $whatever += 10; echo 'whatever now equals: ' . $whatever; die(); } другой add_action('wp_ajax_my_special_action', 'my_action_callback'); add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback'); function my_action_callback() { $whatever = $_POST['whatever']; $whatever += 10; echo 'whatever now equals: ' . $whatever; die(); } 

И начало этой части файла заголовка вашей темы должно выглядеть так:

 <?php $_ajax = admin_url('admin-ajax.php'); ?> <script type="text/javascript" > jQuery(document).ready(function($) { 

Кроме этого, ваш код выглядит так, как будто это хорошо!