{"id":25804,"date":"2021-06-14T16:28:00","date_gmt":"2021-06-14T13:28:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25804"},"modified":"2021-10-18T02:29:36","modified_gmt":"2021-10-17T23:29:36","slug":"so-fugen-sie-benutzerdefinierte-endpunkte-zur-wordpress-api-hinzu","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/so-fugen-sie-benutzerdefinierte-endpunkte-zur-wordpress-api-hinzu\/","title":{"rendered":"So f\u00fcgen Sie benutzerdefinierte Endpunkte zur WordPress-API hinzu"},"content":{"rendered":"<p>K\u00fcrzlich habe ich an einem Projekt gearbeitet, bei dem wir AngularJS als Frontend und WordPress als Backend verwenden wollten. Um Daten zwischen AngularJS und WordPress auszutauschen, haben wir die WordPress REST API verwendet. Es war eine gute Erfahrung, mit der REST-API in WordPress zu arbeiten. WordPress bietet eine sehr saubere und effiziente M\u00f6glichkeit, die REST-API zu verwenden. Mit diesem beliebten CMS k\u00f6nnen Sie auch den benutzerdefinierten Endpunkt erstellen, um Daten dar\u00fcber zu senden\/zu empfangen.<\/p>\n<p>In diesem Artikel untersuchen wir, wie Sie einen benutzerdefinierten Endpunkt in der WordPress-REST-API erstellen. Ich werde den benutzerdefinierten Endpunkt f\u00fcr die GET- und POST-Anforderung erstellen.<\/p>\n<h3>Verwendung der WordPress-REST-API<\/h3>\n<p>Jeder wei\u00df um die Popularit\u00e4t von mobilen Anwendungen und JavaScript-Frameworks. Beim Erstellen einer mobilen Anwendung oder Website mit dem JavaScript-Framework m\u00fcssen Sie f\u00fcr den Datenaustausch mit dem Backend interagieren.<\/p>\n<p>Man kann jede Plattform wie WordPress, Laravel f\u00fcr Backend-Zwecke w\u00e4hlen. Die einzige Voraussetzung ist, dass Sie auf Ihrer Back-End-Plattform \u00fcber API-Endpunkte verf\u00fcgen, um Daten mit dem Front-End auszutauschen. Das Frontend-System gibt einen API-Aufruf an das Backend. Im Backend sollten wir ein System aufbauen, das die API-Anfragen empf\u00e4ngt und verarbeitet.<\/p>\n<p>Meistens haben wir zwei Arten von Anfragen in API-Endpunkten verwendet \u2013 GET und POST. W\u00e4hrend wir API mit GET-Anfrage aufrufen, gibt API als Antwort Daten aus der Datenbank oder l\u00f6scht die Daten in der Datenbank. Bei POST-Anfragen f\u00fcgen wir entweder Datens\u00e4tze in die Datenbank ein oder vergleichen die Daten mit der Datenbank. Nat\u00fcrlich ist das keine Faustregel. Die Benutzer k\u00f6nnen entscheiden, wie es sich je nach ihren Anforderungen verh\u00e4lt.<\/p>\n<h3>Autorisierung mit WordPress REST API<\/h3>\n<p>Die WordPress-REST-API erfordert, dass Sie dem Basic Auth-Flow folgen. Beim Basic Auth m\u00fcssen Sie beim Senden einer API-Anfrage ein Token im Authorization-Header senden. Ab WordPress 5.6 wird eine neue Funktion \u201eAnwendungspassw\u00f6rter&#8220; in das System eingef\u00fchrt. Dieses Anwendungskennwort (mit Benutzernamen) kann als Token im Autorisierungsheader verwendet werden.<\/p>\n<p>Die Anwendungspassw\u00f6rter stehen allen Benutzern auf Websites zur Verf\u00fcgung, die \u00fcber SSL\/HTTPS bereitgestellt werden. Wenn Sie aus irgendeinem Grund kein SSL auf Ihrer Website verwenden, stellen Sie es mit dem folgenden Filter zur Verf\u00fcgung.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Die Option f\u00fcr Anwendungspassw\u00f6rter finden Sie auf der Seite <strong>Benutzer-&gt;Profil<\/strong>. Generieren Sie das Kennwort, indem Sie einfach den Anwendungsnamen eingeben.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" alt=\"So f\u00fcgen Sie benutzerdefinierte Endpunkte zur WordPress-API hinzu\" ><\/a><\/p>\n<p>Im Screenshot sehen Sie die Leerzeichen im Passwort. Anwendungskennw\u00f6rter k\u00f6nnen mit oder ohne Leerzeichen verwendet werden. Falls vorhanden, werden Leerzeichen einfach entfernt, bevor das Passwort auf der WordPress-Seite gehasht und verifiziert wird.<\/p>\n<p>Jetzt sind Sie mit dem Passwort fertig. Als n\u00e4chstes m\u00fcssen Sie zum Erstellen eines Auth-Tokens eine Base64-codierte Version Ihres Benutzernamens und Anwendungskennworts erstellen. Nehmen wir an, Ihr Benutzername ist &#8218;admin&#8216; und das Passwort ist &#8218;Ho9c 9vGs AOBG nXb0 FPpr W5vO&#8216;. Verwenden Sie die folgende Anweisung, die Ihnen ein endg\u00fcltig g\u00fcltiges Token gibt.<\/p>\n<pre><code>&lt;?php\n$username = 'admin';\n$application_password = 'Ho9c 9vGs AOBG nXb0 FPpr W5vO';\n\u00a0\necho base64_encode($username.':'.$application_password);<\/code><\/pre>\n<p>Die obige Anweisung gibt einen Tokenwert als <code>YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=<\/code>. Dieses Token m\u00fcssen Sie beim Aufrufen der WordPress-REST-API im Authorization-Header senden.<\/p>\n<h3>Anmeldung mit WordPress REST API<\/h3>\n<p>Wir sind bereit mit dem Wert des Basic Auth-Tokens. Lassen Sie uns nun einen benutzerdefinierten Endpunkt f\u00fcr ein Anmeldesystem erstellen. Im folgenden Code schreiben wir einen API-Endpunkt, der Benutzeranmeldeinformationen empf\u00e4ngt und pr\u00fcft, ob die Details korrekt sind oder nicht. Sie m\u00fcssen diesen Code in Ihre Themendatei einf\u00fcgen <code>functions.php<\/code>.<\/p>\n<pre><code>add_action(\n\u00a0\u00a0\u00a0\u00a0'rest_api_init',\n\u00a0\u00a0\u00a0\u00a0function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0register_rest_route(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'api',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'login',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'methods'\u00a0 =&gt; 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'login',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0}\n);<\/code><\/pre>\n<p>WordPress bietet eine Aktion &#8218;rest_api_init&#8216;, mit der wir unsere benutzerdefinierten Endpunkte erstellen k\u00f6nnen. Hier verwende ich die Funktion <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">register_rest_route<\/a>, die den obigen API-Endpunkt als YOUR_SITE_URL\/wp-json\/api\/login erzeugt.<\/p>\n<p>In unserem Code ist &#8218;api&#8216; der Namespace, &#8218;login&#8216; ist die Route, eine Methode ist &#8218;POST&#8216; und die Callback-Funktion ist &#8218;login&#8216;. Die Callback-Methode hat eine tats\u00e4chliche Logik.<\/p>\n<p>Um eine Logik f\u00fcr den Login-Flow zu schreiben, sind die erforderlichen POST-Parameter E-Mail und Passwort, die zusammen mit dem Authorization-Header vom Frontend gesendet werden sollten. Wenn Sie diese Daten ver\u00f6ffentlichen, m\u00fcssen Sie sie im JSON-Format senden. Zum Beispiel sende ich vom VSCode mit der <a href=\"https:\/\/themewp.inform.click\/de\/rest-client-erweiterung-fur-visual-studio-code\/\" title=\"Rest Client Extension\">Rest Client Extension<\/a> die POST-Anfrage wie im Screenshot unten gezeigt.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" alt=\"So f\u00fcgen Sie benutzerdefinierte Endpunkte zur WordPress-API hinzu\" ><\/a><\/p>\n<p>Hier haben wir das im vorherigen Schritt erstellte Token als Autorisierungsheaderwert \u00fcbergeben.<\/p>\n<p>F\u00fcgen Sie den folgenden Code f\u00fcr die <code>login()<\/code>Methode in der <code>functions.php<\/code>Datei hinzu.<\/p>\n<pre><code>function login( WP_REST_Request $request) {\n\u00a0\u00a0\u00a0\u00a0$arr_request = json_decode( $request-&gt;get_body() );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (! empty( $arr_request-&gt;email) &amp;&amp;! empty( $arr_request-&gt;password)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ this returns the user ID and other info from the user name.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = get_user_by( 'email', $arr_request-&gt;email );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! $user) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ if the user name doesn't exist.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Wrong email address.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ check the user's login with their password.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! wp_check_password( $arr_request-&gt;password, $user-&gt;user_pass, $user-&gt;ID)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ if the password is incorrect for the specified user.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Wrong password.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'success',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'User credentials are correct.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Email and password are required.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p><strong>Hinweis:<\/strong> Wenn Sie eine Fehlermeldung wie &quot;Es wurde keine Route gefunden, die der URL und der Anfragemethode entspricht&quot; erhalten, m\u00fcssen Sie Ihren Permalink aktualisieren.<\/p>\n<p>Nachdem Sie den Wert &#8217;success&#8216; f\u00fcr den Schl\u00fcssel &#8217;status&#8216; erhalten haben, k\u00f6nnen Sie den Benutzer in der Frontend-Anwendung anmelden.<\/p>\n<h3>Erstellen Sie einen Endpunkt f\u00fcr die GET-Anfrage<\/h3>\n<p>Wir haben gesehen, wie benutzerdefinierte Endpunkte f\u00fcr POST-Anfragen erstellt werden. Schauen wir uns nun die GET-Anfrage mit der WordPress-REST-API an. Dazu schreibe ich eine API, die einen Benutzer l\u00f6scht. Vom Frontend aus sollten Sie die ID eines Benutzers als GET-Parameter \u00fcbergeben.<\/p>\n<pre><code>add_action(\n\u00a0\u00a0\u00a0\u00a0'rest_api_init',\n\u00a0\u00a0\u00a0\u00a0function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0register_rest_route(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'api',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'delete_user\/(?P&lt;id&gt;d+)',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'methods'\u00a0 =&gt; 'GET',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'delete_user',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0}\n);<\/code><\/pre>\n<p>Dieser Code generiert einen API-Endpunkt als YOUR_SITE_URL\/wp-json\/api\/delete_user\/id. An diesen Endpunkt sollten Sie statt der ID die tats\u00e4chliche ID eines Benutzers \u00fcbergeben.<\/p>\n<p>Die R\u00fcckrufmethode <code>delete_user<\/code>hat den folgenden Code.<\/p>\n<pre><code>function delete_user( $data) {\n\u00a0\u00a0\u00a0\u00a0\/\/ delete the user\n\u00a0\u00a0\u00a0\u00a0require_once(ABSPATH.'wp-admin\/includes\/user.php' );\n\u00a0\u00a0\u00a0\u00a0if (wp_delete_user($data['id'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'success',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'User deleted successfully.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'It seems you passed the wrong user id.',\n\u00a0\u00a0\u00a0\u00a0];\n}<\/code><\/pre>\n<p>Ich hoffe, Sie verstehen, wie Sie einen benutzerdefinierten Endpunkt in der WordPress-REST-API erstellen. Bitte teilen Sie Ihre Gedanken und Vorschl\u00e4ge im Kommentarbereich unten mit.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/eine-kurzanleitung-zur-woocommerce-rest-api\/\" title=\"Eine Kurzanleitung zur WooCommerce REST API\">Eine Kurzanleitung zur WooCommerce REST API<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-zeigen-sie-verwandte-produkte-mit-der-woocommerce-rest-api-an\/\" title=\"So zeigen Sie verwandte Produkte mit der WooCommerce REST API an\">So zeigen Sie verwandte Produkte mit der WooCommerce REST API an<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/speech-to-text-mit-amazon-transcribe-in-php\/\" title=\"Speech-to-Text mit Amazon Transcribe in PHP\">Speech-to-Text mit Amazon Transcribe in PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00f6chten Sie einen benutzerdefinierten Endpunkt in der WordPress-REST-API erstellen? Beim Erstellen einer mobilen Anwendung oder Website mit einem JavaScript-Framewrok<\/p>\n","protected":false},"author":1,"featured_media":21623,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[607],"tags":[845],"class_list":["post-25804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-3","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=25804"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/25804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=25804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=25804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=25804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}