Как добавить ajax в тему WordPress

У меня проблема, что я застрял в течение нескольких дней … Я пытаюсь использовать простую функцию ajaxPOST для отправки данных в базу данных MySQL (а не в базу данных WP).

Этот код находится внутри темы «single-post.php» в теме, потому что он должен быть проверен перед каждым сообщением.

$.ajax({ url: 'library/functions/admin_checkuser.php', data: {action: userID}, type: 'post', success: function(output) { alert(output); } }); 

Я просто отправляю переменную в скрипт «admin_checkuser.php», который, в свою очередь, вызывает другой скрипт, который предпринимает действия в базе данных.

Это код для «admin_checkuser»:

 $userid = $_POST['action']; echo $userid;//for testing $oMySQL = new MySQL(); $query = "Select * FROM videotable WHERE uid = '$userid'"; $oMySQL->ExecuteSQL($query); $bb = $oMySQL->iRecords; $aa = $oMySQL->aResult; echo $bb; if ($bb == 0){ $query = "INSERT INTO videotable VALUES ('','$userid','true')"; $oMySQL->ExecuteSQL($query); echo 'true'; exit(); }else{ $sharing = mysql_result($aa,0,"share"); echo $sharing; exit(); } 

Но я не думаю, что вызовы переходят к сценарию. Эти скрипты, которые тестировались вне WordPress и работали, поэтому в WordPress должно быть что-то, что блокирует вызов ajax. Кстати, я пытался разместить «admin_checkuser.php» во многих разных папках, но ничего не получилось.

Заранее спасибо.

Вы должны проверить свой URL-адрес для своего айхакс-звонка.

Возможно, используйте полный URL, а не относительный.

Возможно, из-за расположения вашей темы неправильный URL-адрес. Я предполагаю, что ваш код ajax находится в папке темы.

Есть некоторые функции wordpress, которые получают каталог тем.

Например, если вы на этой странице http://yourwebpage/test/ то вызов ajax пойдет здесь http://yourwebpage/test/library/functions/admin_checkuser.php . Я предполагаю, что это будет неправильное местоположение.

Вот почему вам нужно добавить абсолютный URL-адрес в ваш скрипт. И если это в вашей теме, вы можете использовать этот метод get_template_directory_uri() чтобы получить каталог шаблонов.

См. Здесь: http://codex.wordpress.org/Function_Reference/get_template_directory_uri

Вам гораздо лучше использовать встроенный запрос WordPress AJAX.

Итак, в ваших файлах functions.php темы добавьте свою функцию для вызова, например:

 function checkUser() { $userid = $_POST['user']; //validation also :) $oMySQL = new MySQL(); $query = "Select * FROM videotable WHERE uid = '$userid'"; $oMySQL->ExecuteSQL($query); $bb = $oMySQL->iRecords; $aa = $oMySQL->aResult; echo $bb; if ($bb == 0){ $query = "INSERT INTO videotable VALUES ('','$userid','true')"; $oMySQL->ExecuteSQL($query); echo 'true'; exit(); } else { $sharing = mysql_result($aa,0,"share"); echo $sharing; exit(); } } 

После этого вы добавляете свой крючок с подключением к встроенной системе AJAX

 add_action('wp_ajax_check_user', 'checkUser'); add_action('wp_ajax_nopriv_check_user', 'checkUser'); 

wp_ajax_nopriv_%s позволяет вызывать его из переднего конца.

И затем, в вашем файле javascript, вы просто запускаете свой запрос ajax.

 $.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { alert(output); }); 

Если ajaxurl не определен, вам нужно будет создать его в файле шаблона, что-то вроде этого должно работать, но есть и другие способы.

 add_action('wp_head','ajaxurl'); function ajaxurl() { ?> <script type="text/javascript"> var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; </script> <?php } 

Остается только backend wordpress.

Он принимает действие, переданное в запросе AJAX, ищет соответствующий `wp_ajax(_nopriv)_%s а затем вызывает функцию, назначенную на крючок.

Он также будет передаваться либо $_POST либо $_GET зависимости от типа запроса AJAX.

Вы можете прочитать немного больше об использовании AJAX внутри WordPress .