{"id":29562,"date":"2021-06-14T16:27:00","date_gmt":"2021-06-14T13:27:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29562"},"modified":"2021-10-17T04:15:59","modified_gmt":"2021-10-17T01:15:59","slug":"sa-har-lagger-du-till-anpassade-slutpunkter-till-wordpress-api","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/sa-har-lagger-du-till-anpassade-slutpunkter-till-wordpress-api\/","title":{"rendered":"S\u00e5 h\u00e4r l\u00e4gger du till anpassade slutpunkter till WordPress API"},"content":{"rendered":"<p>Nyligen arbetade jag med ett projekt d\u00e4r vi ville anv\u00e4nda AngularJS p\u00e5 framsidan och WordPress som backend. F\u00f6r att utbyta data mellan AngularJS och WordPress anv\u00e4nde vi WordPress REST API. Det var en bra upplevelse att arbeta med REST API i WordPress. WordPress ger ett mycket rent och effektivt s\u00e4tt att b\u00f6rja anv\u00e4nda REST API. Detta popul\u00e4ra CMS l\u00e5ter dig ocks\u00e5 bygga den anpassade slutpunkten f\u00f6r att skicka \/ ta emot data genom den.<\/p>\n<p>I den h\u00e4r artikeln studerar vi hur man skapar en anpassad slutpunkt i WordPress REST API. Jag ska bygga den anpassade slutpunkten f\u00f6r GET- och POST-beg\u00e4ran.<\/p>\n<h3>Anv\u00e4ndning av WordPress REST API<\/h3>\n<p>Alla vet om populariteten hos mobilapplikationer och JavaScript-ramar. N\u00e4r du bygger en mobilapplikation eller webbplats med hj\u00e4lp av JavaScript-ramverket m\u00e5ste du interagera med backend f\u00f6r utbyte av data.<\/p>\n<p>Man kan v\u00e4lja vilken plattform som helst som WordPress, Laravel f\u00f6r backend-\u00e4ndam\u00e5l. Det enda kravet \u00e4r att du ska ha API-slutpunkter p\u00e5 din backend-plattform f\u00f6r att utbyta data med frontend. Frontend-systemet ger ett API-samtal till backend. P\u00e5 backend b\u00f6r vi bygga ett system som tar emot API-f\u00f6rfr\u00e5gningar och bearbetar det.<\/p>\n<p>F\u00f6r det mesta anv\u00e4nde vi tv\u00e5 typer av f\u00f6rfr\u00e5gningar i API-slutpunkter &#8211; GET och POST. Medan vi ringer till API med GET-beg\u00e4ran kommer API att ge data fr\u00e5n databasen som svar eller ta bort data i databasen. N\u00e4r det g\u00e4ller POST-f\u00f6rfr\u00e5gningar infogar vi antingen poster i databasen eller kontrollerar data mot databasen. Naturligtvis \u00e4r det inte en tumregel. Anv\u00e4ndarna kan best\u00e4mma hur det beter sig beroende p\u00e5 deras krav.<\/p>\n<h3>Auktorisering med WordPress REST API<\/h3>\n<p>WordPress REST API kr\u00e4ver att du f\u00f6ljer Basic Auth-fl\u00f6de. I Basic Auth m\u00e5ste du skicka en token i beh\u00f6righetsrubriken medan du skickar en API-beg\u00e4ran. Fr\u00e5n och med WordPress 5.6 introduceras en ny funktion &#8217;Application Passwords&#8217; i systemet. Detta applikationsl\u00f6senord (med anv\u00e4ndarnamn) kan anv\u00e4ndas som en token i beh\u00f6righetshuvudet.<\/p>\n<p>Applikationsl\u00f6senorden \u00e4r tillg\u00e4ngliga f\u00f6r alla anv\u00e4ndare p\u00e5 webbplatser som serveras via SSL \/ HTTPS. Om du av n\u00e5gon anledning inte anv\u00e4nder SSL p\u00e5 din webbplats s\u00e5 g\u00f6r du det tillg\u00e4ngligt med filtret nedan.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Du hittar alternativet f\u00f6r applikationsl\u00f6senord p\u00e5 <strong>sidan Anv\u00e4ndare-&gt; Profil<\/strong>. Skapa l\u00f6senordet genom att helt enkelt ange applikationsnamn.<\/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=\"S\u00e5 h\u00e4r l\u00e4gger du till anpassade slutpunkter till WordPress API\" ><\/a><\/p>\n<p>I sk\u00e4rmdumpen m\u00e4rker du mellanslag i l\u00f6senordet. Applikationsl\u00f6senord kan anv\u00e4ndas med eller utan mellanslag. Om det inkluderas kommer mellanslag bara att tas bort innan l\u00f6senordet hashas och verifieras i WordPress-slutet.<\/p>\n<p>Nu \u00e4r du redo med l\u00f6senordet. F\u00f6r att skapa en Auth-token m\u00e5ste du skapa en Base64-kodad version av ditt anv\u00e4ndarnamn och applikationsl\u00f6senord. L\u00e5t oss s\u00e4ga att ditt anv\u00e4ndarnamn \u00e4r &#8217;admin&#8217; och l\u00f6senordet \u00e4r &#8217;Ho9c 9vGs AOBG nXb0 FPpr W5vO&#8217;. Anv\u00e4nd f\u00f6ljande uttalande som ger dig en sista giltig token.<\/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>Ovanst\u00e5ende uttalande returnerar ett tokenv\u00e4rde som <code>YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=<\/code>. Denna token m\u00e5ste du skicka in auktoriseringshuvudet n\u00e4r du ringer till WordPress REST API.<\/p>\n<h3>Logga in med WordPress REST API<\/h3>\n<p>Vi \u00e4r redo med Basic Auth-tokenv\u00e4rdet. L\u00e5t oss nu bygga en anpassad slutpunkt f\u00f6r ett inloggningssystem. I koden nedan skriver vi en API-slutpunkt som tar emot anv\u00e4ndaruppgifter och kontrollerar om detaljerna \u00e4r korrekta eller inte. Du m\u00e5ste l\u00e4gga till den h\u00e4r koden i din temafil <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 tillhandah\u00e5ller en \u00e5tg\u00e4rd &#8217;rest_api_init&#8217; med vilken vi kan bygga v\u00e5ra anpassade slutpunkter. H\u00e4r anv\u00e4nder jag funktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">register_rest_route<\/a> som producerar ovanst\u00e5ende API-slutpunkt som YOUR_SITE_URL \/ wp-json \/ api \/ login.<\/p>\n<p>I v\u00e5r kod \u00e4r &#8217;api&#8217; namnomr\u00e5det, &#8217;inloggning&#8217; \u00e4r rutten, en metod \u00e4r &#8217;POST&#8217; och \u00e5teruppringningsfunktionen \u00e4r &#8217;inloggning&#8217;. \u00c5teruppringningsmetoden har en faktisk logik.<\/p>\n<p>F\u00f6r att kunna skriva en logik f\u00f6r inloggningsfl\u00f6det \u00e4r de POST-parametrar som kr\u00e4vs e-postadress och l\u00f6senord som ska skickas fr\u00e5n frontend tillsammans med beh\u00f6righetsrubriken. N\u00e4r du l\u00e4gger upp dessa uppgifter m\u00e5ste du skicka dem i JSON-format. Till exempel, fr\u00e5n VSCode med <a href=\"https:\/\/themewp.inform.click\/sv\/rest-client-extension-for-visual-studio-kod\/\" title=\"Rest Client Extension\">Rest Client Extension<\/a> skickar jag POST-beg\u00e4ran enligt bilden nedan.<\/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=\"S\u00e5 h\u00e4r l\u00e4gger du till anpassade slutpunkter till WordPress API\" ><\/a><\/p>\n<p>H\u00e4r har vi skickat token som skapades i f\u00f6reg\u00e5ende steg som auktoriseringshuvudv\u00e4rde.<\/p>\n<p>L\u00e4gg till koden nedan f\u00f6r <code>login()<\/code>metoden i <code>functions.php<\/code>filen.<\/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>Obs!<\/strong> Om du fick ett fel som &quot;Ingen rutt hittades som matchar URL och beg\u00e4ran&quot;, m\u00e5ste du uppdatera din permal\u00e4nk.<\/p>\n<p>N\u00e4r du har f\u00e5tt &quot;framg\u00e5ngs&quot; -v\u00e4rdet f\u00f6r &quot;status&quot; -tangenten kan du logga in anv\u00e4ndaren i frontend-applikationen.<\/p>\n<h3>Bygg en slutpunkt f\u00f6r GET-beg\u00e4ran<\/h3>\n<p>Vi har sett hur man bygger anpassade slutpunkter f\u00f6r POST-f\u00f6rfr\u00e5gningar. L\u00e5t oss nu titta p\u00e5 GET-beg\u00e4ran med WordPress REST API. F\u00f6r detta kommer jag att skriva ett API som tar bort en anv\u00e4ndare. Fr\u00e5n frontend ska du skicka id f\u00f6r en anv\u00e4ndare som en GET-parameter.<\/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>Den h\u00e4r koden genererar en API-slutpunkt som YOUR_SITE_URL \/ wp-json \/ api \/ delete_user \/ id. Till den h\u00e4r slutpunkten ska du ist\u00e4llet f\u00f6r id skicka ett anv\u00e4ndares faktiska id.<\/p>\n<p>\u00c5teruppringningsmetoden <code>delete_user<\/code>kommer att ha f\u00f6ljande kod.<\/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>Jag hoppas att du f\u00f6rst\u00e5r hur man bygger en anpassad slutpunkt i WordPress REST API. Dela dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/en-snabbguide-om-rest-api-for-woocommerce\/\" title=\"En snabbguide om REST API f\u00f6r WooCommerce\">En snabbguide om REST API f\u00f6r WooCommerce<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/sa-har-visar-du-relaterade-produkter-med-hjalp-av-woocommerce-rest-api\/\" title=\"S\u00e5 h\u00e4r visar du relaterade produkter med hj\u00e4lp av WooCommerce REST API\">S\u00e5 h\u00e4r visar du relaterade produkter med hj\u00e4lp av WooCommerce REST API<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/tal-till-text-med-amazon-transcribe-i-php\/\" title=\"Tal till text med Amazon Transcribe i PHP\">Tal till text med Amazon Transcribe i PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vill du skapa en anpassad slutpunkt i WordPress REST API? Medan du bygger mobilapplikation eller webbplats med hj\u00e4lp av ett JavaScript-ramverk<\/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":[614],"tags":[850],"class_list":["post-29562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29562"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29562\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}