WordPress Admin-AJAX.PHP проблемы - PullRequest
       0

WordPress Admin-AJAX.PHP проблемы

0 голосов
/ 08 декабря 2011

Я работаю над проектом WordPress и у меня возникают проблемы с ajax.

Я пытаюсь настроить вызов ajax со страницы WordPress на PHP-скрипт, который я назвал getHistoricalTransFunctions.php. Затем getHistoricalTransFunctions.php включает файл, полный функций, и запускает нужную мне функцию. Необходимая функция затем распечатывает ответ, который отправляется обратно в мой код JavaScript, который затем отображает ответ. Уловка в том, что я пытаюсь вызвать функцию NEEDS в среде WordPress, потому что она вызывает определенные функции WordPress.

Я провел некоторое исследование и обнаружил, что wordpress предоставляет обработчик ajax в admin-ajax.php. Я прошел ряд уроков, в том числе:

http://codex.wordpress.org/AJAX_in_Plugins/

http://www.1stwebdesigner.com/css/implement-ajax-wordpress-themes/

http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/

Я следовал всем этим, но по какой-то причине я получаю ответ «-1» со страницы admin-ajax.php. Я проследил это и обнаружил, что он происходит из функции is_user_logged_in (). Очевидно, WordPress не считает, что мой пользователь вошел в систему, поэтому он выдает ошибки в этом блоке кода. Вот часть моего кода:

Это мой вызов JavaScript:

$('button#RunReportButton2').click(function() {
  $('#transactionContainer2').html("<img src='<?php echo $RootDomain; ?>/wp-content/themes/test-client/images/ajax-loader.gif' id='ajaxloader' style='margin: 170px auto auto 340px;' />");
  var fromDate2 = $('#fromDate2').val();
  var toDate2 = $('#toDate2').val();
  $.ajax({ type: "POST",
    url:ajaxurl,
    type:'POST',
    data: { action:"runReport2",
            startingInt:"0",
            fromDate:fromDate2,
            toDate:toDate2 },
    success: function(html) {
      $('#transactionContainer2').html(html);
    }
  });
  return false;
});

Я добавил это в конец admin-ajax.php:

add_action(wp_ajax_nopriv_runReport2, runReport2);
add_action(wp_ajax_runReport2, runReport2);

Тогда моя фактическая функция php, которая вызывается:

function runReport2() {
  include("$RootDomain/wp-content/themes/test-client/reports/historicalTransFunctions.php");

  $startingIndex = $_POST['startingInt'];
  //$startingIndex = 0;
  $fromDate = $_POST['fromDate'];
  //$fromDate = "2011-02-11";
  $toDate = $_POST['toDate'];
  //$toDate = "2011-12-05";

  // post variable sanitization
  if(!is_numeric($startingIndex)) {
    printHistoricalTransactions($token, $client, 0);
    die();
  }

  if($startingIndex <= 0) {
    printHistoricalTransactions($token, $client, 0);
    die();
  }

  // match date
  $dateregex = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/';

  if($toDate != "" && $fromDate != "") {
    if(preg_match($dateregex, $fromDate) && preg_match($dateregex, $toDate))
      printHistoricalTransactions($token, $client, $startingIndex, $fromDate, $toDate);
  } else {
    printHistoricalTransactions($token, $client, $startingIndex);
  }
  die();
}

Мне интересно, является ли admin-ajax.php лучшим способом сделать то, что мне нужно, и мне также интересно, почему это не работает? Спасибо!

1 Ответ

3 голосов
/ 08 декабря 2011

Первое, что вы никогда не должны изменять файлы ядра.Нет необходимости добавлять вашу функцию ajax в admin-ajax.php.Просто поместите add_action прямо над функцией.Кроме того, в вашей add_action отсутствуют кавычки вокруг имен действий и функций (вероятно, недосмотр при размещении здесь вашего кода).

Также переменная javascript ajaxurl недоступна во внешнем интерфейсе, если пользователь не вошел в систему.нужно определить переменную в вашем js: ajaxurl = 'http://your_site.com/wp-admin/admin-ajax.php';

Часто с admin-ajax.php мне нужно использовать буферизацию вывода, чтобы заставить его работать правильно:

 function runReport2() {
 ob_start ();
 //your code

 //end your code
$response = ob_get_contents ();
    ob_end_clean ();
    echo $response;
    die( 1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...