2017-02-21 11 views
1

Я пытаюсь создать REST API, которые генерируют json данных для wordpress сообщений. Приведенный ниже код находится в functions.php файла:Невозможно изменить ошибку заголовка при создании rest api в wordpress

add_action('wp_enqueue_scripts', 'create_json_data', 0); 
function create_json_data(){ 
    ob_start(); 
    if (isset($_GET['getjson']) && $_GET['getjson'] == true) { 
     if (have_posts()) { 
      $data = array(); 
      while (have_posts()) { 
       the_post(); 
       $new_data = array(
        "title" => get_the_title(), 
        "content" => get_the_excerpt(), 
        "image" => get_the_post_thumbnail_url(), 
        "hyperlink" => get_the_permalink() 
        ); 
       array_push($data, $new_data); 
      } 
     } 
     header('Content-type: application/json'); 
     echo json_encode($data); 
     exit(); 
    } 
    ob_end_flush(); 
} 

Он работает очень хорошо во вновь wordpress установки. Но когда я реализую его в своем интернет-сайте он дает мне ошибку

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже посланные (выход начался в /home1/public_html/blogsite/WP-содержание/темы/webtheme /header.php:10) в /home1/public_html/website-theme/wp-content/themes/webtheme/functions.php на линии 159

по линии 10 в header.php является wp_head()

Я не знаю, как добраться до этой ошибки, чтобы генерировать только данные json.

ответ

1

Необходимо создать пользовательское действие AJAX. Здесь вы найдете все, что нужно для кода: https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

Или вы можете использовать плагин Wordpress REST API. Это позволяет вам создать свою собственную конечную точку API. https://wordpress.org/plugins/rest-api/

EDIT Я даю вам маленький пример с кодом Ajax Jquery для его вызова.

add_action('wp_ajax_XXXXXX', 'ajax_XXXXXX'); 
add_action('wp_ajax_nopriv_XXXXXX', 'ajax_XXXXXX'); 
function ajax_XXXXXX() { 
    header('Content-Type: application/json'); 
    echo json_encode(array(
     'text' => "Lorem ipsum dolor ...", 
     'time' => time(), 
     'user_id' => get_current_user_id() 
    )); 
    die(); 
} 
$.ajax({ 
    url : "/wp-admin/admin-ajax.php", 
    method : "POST", 
    data : { 
     action : "XXXXXX" 
    }, 
    success : function(datas) { 
     console.log(datas); 
    } 
}); 
+0

спасибо. но когда я использую этот крючок, он не возвращает мне никаких json-данных. –

+0

Я обновляю свое сообщение простым примером. – Bazaim

+0

Я пытаюсь использовать url 'http: // localhost: 1234', следуя вашему ответу, и он возвращает весь контент страницы, а не только данные json. –