keranm
  • 0
Новичок

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

  • 0

Хорошо, я начинаю с некоторых вещей 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();
}

Это ЕДИНСТВЕННАЯ функция в моем functions.php

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

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

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

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

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

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

Share
  1. Поместите эти add_action функции в свой functions.php файл тоже. Если они находятся в header.php, WordPress никогда их не регистрирует, поскольку заголовок не загружается в AJAX. Кроме того, вам не нужен этот is_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();
    }
    

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

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

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

    • 0

Оставить ответ

You must login to add an answer.