Programmieren lernen | Codebeispiele | Jobbörse | Webentwicklung

REST-API von WordPress – So kannst du sie verwenden.

Die REST-API ist seit der Version 4.7. im WordPress Core zu finden, also der Kernprogrammierung des Content Management Systems. Vorher waren zusätzliche Plugins nötig um diese zu verwenden.

Die REST-API, also die Schnittstelle ermöglicht die direkte Kommunikation, mit der von WordPress verwendeten Datenbank, in der alle Informationen einer Website gespeichert sind. Der Datenaustausch erfolgt hierbei im JSON Format.

WordPress REST-API deaktivieren

Wenn du die API nicht verwenden willst oder einfach nicht benötigst, solltest du diese auf jeden Fall deaktivieren oder wenigstens vor unbefugten Zugriff schützen.

Kopiere hierzu eines der folgenden Skripte in die functions.php deines Themes.

WordPress REST-API komplett deaktivieren

add_filter( 'rest_authentication_errors', function( $result ) {
    return new WP_Error( 
        'rest_disabled',
        'Wordpress REST-API ist deaktiviert.',
         array( 'status' => 404 )
    );
});

WordPress REST-API nur sichtbar für angemeldete User

add_filter( 'rest_authentication_errors', function( $result ) {
	if ( ! empty( $result ) ) {
		return $result;
	}
	if ( ! is_user_logged_in() ) {
		return new WP_Error( 
			'rest_auth_user', 
			'Bitte anmelden um einen Request zu starten.', 
			array( 'status' => 401 ) 
		);
	}
	return $result;
});

Ob deine WordPress API erreichbar ist, kannst du ganz einfach testen. Gib im Browser dazu deine Domain plus /wp-json/wp/v2/ ein.

Beispiel:

https://www.example.com/wp-json/wp/v2/

WordPress REST-API verwenden

Anhand eines einfachen Beispiels zeige ich dir wie du Beiträge aus der WordPress API auf einer anderen Webseite mit PHP einbinden kannst.

Als erstes erstellen wir einen neue Funktion.

function getWpPosts() {

}

In diese Funktion packen wir als nächstes ein paar Variablen.

$posts = "3"; // Anzahl der angezeigten Beiträge
$apiUrl = "https://www.example.com/wp-json/wp/v2/"; // Die URL zu deiner API - Bitte anpassen
$content = "posts"; // Posts = Beiträge

$result = file_get_contents($apiUrl . $content . "?per_page=" . $posts); // Liest alle Daten aus der API in einen String.
$jsonArray = json_decode($result, true); // Dekodiert alle gelesenen Daten und "true" wandelt die Daten in ein array um.

Die Verbindung zur API steht und die Daten kommen damit ordentlich bei uns an. Machen wir uns jetzt an die Ausgabe der Daten.

Für die Ausgabe benötigen wir eine foreach Schleife. Zur Anzeige verwende ich gerne Bootstrap, deshalb habe ich auch gleich die Grid CSS Klassen verwendet. Wie du das später machst, bleibt dir überlassen, dass hat keine Auswirkung auf die API.

Auch dieses Skript integrieren wir in unsere Funktion.

foreach ($jsonArray as $key=>$value) :
        if ($value['status'] === 'publish') :
            echo "<div class='col-md-4'>";
            echo "<h4>" . $value['title']['rendered'] . "</h4>";
            $date = date_create($value['date']);
            echo "<p>Geposted: " . date_format($date, 'd.m.Y - H:i:s') . " Uhr";
            echo "<p>" . $value['excerpt']['rendered'] . "</p>";
            echo '<a href="' . $value['link'] . '" target="_blank">Link text</a>';
            echo "</div>";
        else :
            echo '<h4>Keine Beiträge veröffentlicht</h4>';
            die();
        endif;
endforeach;

Erklärung:

  • In Zeile 2 stelle ich zur Sicherheit noch mal klar das nur Beiträge angezeigt werden sollen, wenn diese auch veröffentlicht sind.
  • In Zeile 5 lese ich das Datum aus, wann der Beitrag erstellt wurde damit ich in Zeile 6 das Datum in das deutsche Format umwandeln kann.

Hinweis: Alle Endpunkte der API findest du in der offiziellen Doku oder liest diese direkt aus deiner API aus. Hierzu verwende ich für Google Chrome die Erweiterung „JSONView“.

Die URL für die Beiträge lautet:

https://www.example.com/wp-json/wp/v2/posts

WordPress REST-API liefert auch Bilder

Bis jetzt würdest du zwar die Beiträge angezeigt bekommen aber noch ohne Beitragsbilder. Um nun auch die Bilder in die Ansicht zu bekommen, musst du nur die foreach Schleife erweitern. Ich zeige dir wie:

$mediaUrl = $apiUrl . "media/" . $value['featured_media']; // Die URL zu deiner Medien Schnittstelle
$mediaResult = file_get_contents($mediaUrl); // Liest alle Daten aus der API in einen String.
$jsonMediaArray = json_decode($mediaResult, true); // Dekodiert alle gelesenen Daten und "true" wandelt die Daten in ein array um.

In das Grid-Konstrukt geben wir nun noch das Beitragsbild aus.

echo '<img class="img-fluid" src="' . $jsonMediaArray['source_url'] . '">';

Kompletter PHP-Code im Überblick

function getWpPosts() {

    $posts = "3";
    $apiUrl = "https://www.example.com/wp-json/wp/v2/";
    $content = "posts";

    $result = file_get_contents($apiUrl . $content . "?per_page=" . $posts);
    $jsonArray = json_decode($result, true);

    foreach ($jsonArray as $key=>$value) :
        if ($value['status'] === 'publish') :
            $mediaUrl = $apiUrl . "media/" . $value['featured_media'];
            $mediaResult = file_get_contents($mediaUrl);
            $jsonMediaArray = json_decode($mediaResult, true);

            echo "<div class='col-md-4'>";
            echo '<img class="img-fluid" src="' . $jsonMediaArray['source_url'] . '">';
            echo "<h4>" . $value['title']['rendered'] . "</h4>";
            $date = date_create($value['date']);
            echo "<p>Geposted: " . date_format($date, 'd.m.Y - H:i:s') . " Uhr";
            echo "<p>" . $value['excerpt']['rendered'] . "</p>";
            echo '<a href="' . $value['link'] . '" target="_blank">Link text</a>';
            echo "</div>";
        else :
            echo '<h4>Keine Beiträge veröffentlicht</h4>';
            die();
        endif;
    endforeach;

}

PHP-Funktion ausführen

An der Stelle wo jetzt die Beiträge angezeigt werden sollen, führst du nun einfach die PHP Funktion aus.

<section>
        <div class="container">
            <div class="row">
                <?php getWpPosts() ?>
            </div>
        </div>
</section> 

Gratulation, du verwendest nun deine WordPress REST Schnittstelle!

Noch keine Kommentare vorhanden. Sei DU der erste!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.