2017-02-21 3 views
1

nicht ändern Ich versuche, eine REST API zu erstellen, die json Daten für wordpress Beiträge generieren. Der folgende Code ist in functions.php Datei:Kann Header-Fehler beim Erstellen von Rest-API in 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(); 
} 

Es läuft sehr gut in neu wordpress Installation. Aber wenn ich es in meiner Online-Website implementieren es gibt mir Fehler

Warnung: Kann nicht modify header information - headers already sent by (Ausgabe begann bei /home1/public_html/Blogsite/wp-content/themes/webtheme /header.php:10) in /home1/public_html/website-theme/wp-content/themes/webtheme/functions.php auf Leitung 159

in Zeile 10 in header.php ist wp_head()

Ich weiß nicht, wie man diesen Fehler bekommt, um json Daten nur zu erzeugen.

Antwort

1

Sie müssen benutzerdefinierte AJAX-Aktion erstellen. Sie finden alles, was Sie brauchen auf dem Codex: https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

Oder Sie können das Wordpress REST API-Plugin verwenden. Sie können Ihren eigenen API-Endpunkt erstellen. https://wordpress.org/plugins/rest-api/

EDIT Ich gebe Ihnen ein kleines Beispiel, mit dem Ajax-Code jQuery es zu nennen.

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

danke. aber wenn ich diesen Haken benutze, gibt er mir keine JSON Daten zurück –

+0

Ich aktualisiere meine Nachricht mit einem einfachen Beispiel. – Bazaim

+0

Ich versuche bei URL 'http: // localhost: 1234' durch Befolgen Ihrer Antwort und es gibt ganze Seite Inhalt statt nur Json Daten. –

Verwandte Themen