WordPress – выбор информации о пользователе с помощью запроса jQuery ajax POST

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

Я вижу, что идентификатор пользователя отправляется правильно через AJAX POST, но я получаю внутреннее сообщение об ошибке, и я не знаю, почему.

Сначала я подумал, что это связано с тем, что я пытался получить некоторые пользовательские поля, которые я добавил в профиль пользователя, но даже когда я упростил свой сценарий, я все еще получаю сообщение об ошибке.

Любая помощь высоко ценится!

Внешний интерфейс

$('.author').click(function() { var id = $(this).attr('id'); var temp = id.split('-'); id = temp[1]; $.ajax({ type: 'POST', url: 'wp-content/themes/twentyeleven/author_info.php', data: {id: id}, dataType: 'html', success: function(data) { $('#author-bio').html(data); } }); return false; }); 

author_info.php

 $user_id = $_POST['id']; $forename = get_the_author_meta('user_firstname', $user_id); $output = $user_id; echo $output; 

Сообщение об ошибке

500 (Internal Server Error) jquery.min.js:4

Solutions Collecting From Web of "WordPress – выбор информации о пользователе с помощью запроса jQuery ajax POST"

Матье добавил взломанный подход к перехвату запроса и перенаправлению, что хорошо. Я предпочитаю строить ответы AJAX, которые возвращают массивы json_encoded .

 $('.author').click(function() { var id = $(this).attr('id'); var temp = id.split('-'); id = temp[1]; $.ajax({ url: 'http://absolute.path/wp-admin/admin-ajax.php', data: {'action' : 'ajax_request', 'fn': 'getAuthorMeta', 'id': id}, dataType: 'json', success: function(data) { //We expect a JSON encoded array here, not an HTML template. } }); return false; }); 

Теперь мы создаем функцию для обработки наших запросов ajax.

Во-первых, нам нужно определить наш метод add_action ajax ->

 add_action('wp_ajax_nopriv_ajax_request', 'ajax_handle_request'); add_action('wp_ajax_ajax_request', 'ajax_handle_request'); 

Нам нужно использовать обе строки add_action . Я не пойму, почему. Здесь вы увидите _ajax_request . Это «действие», которое мы отправили в наших data: {'action' : 'ajax_request'} функции AJAX data: {'action' : 'ajax_request'} . Мы используем этот крючок для проверки нашего запроса AJAX, это может быть все, что вы хотите.

Затем нам нужно будет создать или использовать ajax_handle_request .

 function ajax_handle_request(){ switch($_REQUEST['fn']){ case 'getAuthorMeta': $output = ajax_get_author_meta($_REQUEST['id']); break; default: $output = 'That is not a valid FN parameter. Please check your string and try again'; break; } $output = json_encode($output); if(is_array($output)){ return $output; }else{ echo $output; } } 

Теперь давайте построим нашу функцию, чтобы на самом деле получить мета-автора.

 function ajax_get_author_meta($id){ $theMeta = get_the_author_meta([meta_option], $id); return $theMeta; } 

Где [meta_option] – поле, предоставленное функцией get_the_author_meta WP .

На этом этапе мы вернемся к нашему success:function(data) и (данные) – это ссылка на возвращаемый нами массив json_encoded . Теперь мы можем перебирать объект, чтобы получить наши поля и выводить их на страницу по вашему желанию.

Я бы рекомендовал вам использовать метод действия WP AJAX .

Как и в вашем случае, добавьте следующее в файл functions.php.

  add_action('wp_ajax_get_user_info', 'ajax_get_user_info'); add_action('wp_ajax_nopriv_get_user_info', 'ajax_get_user_info'); function ajax_get_user_info() { //Handle request then generate response using WP_Ajax_Response or your html. } 

затем в теге javascript.

 $('.author').click(function() { var id = $(this).attr('id'); var temp = id.split('-'); id = temp[1]; jQuery.post( ajaxurl, /* if you get error of undefined ajaxurl. set it to "http://example.com/wordpress/wp-admin/admin-ajax.php"*/ { 'action':'get_user_info', 'user_id':id }, function(response){ alert('The server responded: ' + response); } ); }); 

Я бы рекомендовал вам прочитать 5 советов по использованию AJAX в WordPress .

пс; Код выше не проверен, он может иметь ошибки. Но ты получил идею.

Вы не находитесь в POST в тот момент, потому что вы вызываете определенную страницу своего шаблона, которая, вероятно, не соответствует какой-либо статье в вашем блоге.

Вместо этого создайте pluggin, который сделает это:

 add_action('template_redirect', 'my_author_meta_intercept'); function my_author_meta_intercept(){ if(isset($_POST['getAuthorMeta'])){ echo get_the_author_meta('user_firstname', $_POST['getAuthorMeta']); exit(); } } 

Это приведет к короткому замыканию запроса на ту же страницу, что и раньше, когда вы вызываете его, используя:

 http://mysite/mycurrenturl?getAuthorMeta=testMetaKey 

Поэтому вызов этого сообщения обычно возвращает статью как обычно, но если вы перейдете? GetAuthorMeta, она остановит выбор шаблона и просто вернет точный контент, который вы хотите вернуть.

На вашей странице вам просто нужно изменить свой javascript, чтобы:

 $('.author').click(function() { var id = $(this).attr('id'); var temp = id.split('-'); id = temp[1]; $.ajax({ type: 'POST', url: window.location.href, data: {getAuthorMeta: id}, success: function(data) { $('#author-bio').html(data); } }); return false; }); 

Просто убедитесь, что вы адаптируете концепцию к тому, что вам нужно!