admin-ajax.php Предупреждение «Отсутствует аргумент 2»

У меня есть следующий код в functions.php

<script type="text/javascript"> var post_id = "1055"; // hardcoded post id for testing purposes var type = "some_type"; var data = {action: "get_variations", parent_id: post_id, item_type: type}; jQuery.post("/wp-admin/admin-ajax.php", data, function(response){ alert(response); }); </script> <?php function get_variations($parent_id, $item_type){ // etc.. } add_action('wp_ajax_get_variations', 'get_variations', 10, 2); ?> 

Когда ajax пытается вызвать get_variations, я всегда получаю:

Предупреждение: Отсутствует аргумент 2 для get_variations ()

Что я делаю не так?

Ajax-вызовы используют $_POST -variable для отправки своих аргументов функции. Поскольку $_POST['action'] всегда используется вызовами WordPress Ajax (содержит имя действия, очевидно;)), PHP только жалуется на отсутствующий аргумент no. 2.

Вы можете использовать решение, предоставленное Bainternet. Если вы хотите использовать свою функцию в ajax, а также в «чистом» контексте PHP, вы можете сделать это следующим образом:

  <?php function get_variations($parent_id = false, $item_type = false){ if(isset($_POST['parent_id'])) { $parent_id = $_POST['parent_id']; $item_type = $_POST['item_type']; } // etc.. } 

Таким образом, PHP всегда будет принимать два приведенных аргумента, и вы также можете использовать эту функцию без $_POST .

В вашем обратном вызове ajax нет аргументов,

это должно работать:

 function get_variations(){ $parent_id = $_POST['parent_id']; $item_type = $_POST['item_type']; // etc.. } add_action('wp_ajax_get_variations', 'get_variations');