{"id":26212,"date":"2021-06-14T16:25:00","date_gmt":"2021-06-14T13:25:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=26212"},"modified":"2021-10-18T03:00:48","modified_gmt":"2021-10-18T00:00:48","slug":"come-aggiungere-endpoint-personalizzati-all-api-di-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/come-aggiungere-endpoint-personalizzati-all-api-di-wordpress\/","title":{"rendered":"Come aggiungere endpoint personalizzati all&#8217;API di WordPress"},"content":{"rendered":"<p>Recentemente ho lavorato a un progetto in cui volevamo utilizzare AngularJS sul front-end e WordPress come back-end. Per scambiare dati tra AngularJS e WordPress, abbiamo utilizzato l&#8217;API REST di WordPress. \u00c8 stata una buona esperienza lavorare con l&#8217;API REST in WordPress. WordPress fornisce un modo molto pulito ed efficiente per iniziare a utilizzare l&#8217;API REST. Questo popolare CMS ti consente anche di creare l&#8217;endpoint personalizzato per inviare\/ricevere dati attraverso di esso.<\/p>\n<p>In questo articolo, studiamo come creare un endpoint personalizzato nell&#8217;API REST di WordPress. Creer\u00f2 l&#8217;endpoint personalizzato per la richiesta GET e POST.<\/p>\n<h3>Utilizzo dell&#8217;API REST di WordPress<\/h3>\n<p>Tutti conoscono la popolarit\u00e0 delle applicazioni mobili e dei framework JavaScript. Durante la creazione di un&#8217;applicazione mobile o di un sito Web utilizzando il framework JavaScript \u00e8 necessario interagire con il backend per lo scambio di dati.<\/p>\n<p>Si pu\u00f2 scegliere qualsiasi piattaforma come WordPress, Laravel per scopi di backend. L&#8217;unico requisito \u00e8 la presenza di endpoint API sulla piattaforma di backend per scambiare dati con il frontend. Il sistema frontend fornisce una chiamata API al backend. Sul backend, dovremmo costruire un sistema che riceva le richieste API e le elabori.<\/p>\n<p>Per lo pi\u00f9 abbiamo utilizzato due tipi di richieste negli endpoint API: GET e POST. Mentre chiamiamo API con richiesta GET, l&#8217;API fornir\u00e0 dati dal database in risposta o eliminer\u00e0 i dati nel database. In caso di richieste POST, inseriamo record nel database o controlliamo i dati rispetto al database. Ovviamente non \u00e8 una regola empirica. Gli utenti possono decidere come si comporta in base alle loro esigenze.<\/p>\n<h3>Autorizzazione utilizzando l&#8217;API REST di WordPress<\/h3>\n<p>L&#8217;API REST di WordPress richiede di seguire il flusso di autenticazione di base. Nell&#8217;autenticazione di base, devi inviare un token nell&#8217;intestazione di autorizzazione durante l&#8217;invio di una richiesta API. A partire da WordPress 5.6, viene introdotta nel sistema una nuova funzionalit\u00e0 &quot;Password dell&#8217;applicazione&quot;. Questa password dell&#8217;applicazione (con nome utente) pu\u00f2 essere utilizzata come token nell&#8217;intestazione dell&#8217;autorizzazione.<\/p>\n<p>Le password dell&#8217;applicazione sono disponibili per tutti gli utenti sui siti serviti su SSL\/HTTPS. Se per qualche motivo non stai utilizzando SSL sul tuo sito web, lo rendi disponibile utilizzando il filtro sottostante.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Troverai l&#8217;opzione per le password dell&#8217;applicazione nella pagina <strong>Utenti-&gt;Profilo<\/strong>. Genera la password semplicemente inserendo il nome dell&#8217;applicazione.<\/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=\"Come aggiungere endpoint personalizzati all&#039;API di WordPress\" ><\/a><\/p>\n<p>Nello screenshot, noti gli spazi nella password. Le password dell&#8217;applicazione possono essere utilizzate con o senza gli spazi. Se inclusi, gli spazi verranno semplicemente eliminati prima che la password venga sottoposta a hash e verificata sul lato WordPress.<\/p>\n<p>Ora sei pronto con la password. Successivamente, per creare un token di autenticazione devi creare una versione codificata Base64 del tuo nome utente e password dell&#8217;applicazione. Supponiamo che il tuo nome utente sia &quot;admin&quot; e la password sia &quot;Ho9c 9vGs AOBG nXb0 FPpr W5vO&quot;. Usa la seguente dichiarazione che ti d\u00e0 un token valido finale.<\/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>L&#8217;istruzione precedente restituisce un valore token come <code>YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=<\/code>. Questo token \u00e8 necessario inviare nell&#8217;intestazione di autorizzazione durante la chiamata all&#8217;API REST di WordPress.<\/p>\n<h3>Accedi utilizzando l&#8217;API REST di WordPress<\/h3>\n<p>Siamo pronti con il valore del token di autenticazione di base. Ora, costruiamo un endpoint personalizzato per un sistema di accesso. Nel codice seguente, scriviamo un endpoint API che riceve le credenziali dell&#8217;utente e verifica se i dettagli sono corretti o meno. Devi aggiungere questo codice nel <code>functions.php<\/code>file dei temi .<\/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 fornisce un&#8217;azione &#8216;rest_api_init&#8217; utilizzando la quale possiamo costruire i nostri endpoint personalizzati. Qui sto usando la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">register_rest_route<\/a> che produce l&#8217;endpoint API sopra come YOUR_SITE_URL\/wp-json\/api\/login.<\/p>\n<p>Nel nostro codice &quot;api&quot; \u00e8 lo spazio dei nomi, &quot;login&quot; \u00e8 il percorso, un metodo \u00e8 &quot;POST&quot; e la funzione di callback \u00e8 &quot;login&quot;. Il metodo di callback avr\u00e0 una logica effettiva.<\/p>\n<p>Per scrivere una logica per il flusso di accesso, i parametri POST richiesti sono e-mail e password che devono essere inviati dal frontend insieme all&#8217;intestazione dell&#8217;autorizzazione. Durante la pubblicazione di questi dati, \u00e8 necessario inviarli in formato JSON. Ad esempio, dal VSCode utilizzando <a href=\"https:\/\/themewp.inform.click\/it\/rest-client-extension-per-visual-studio-code\/\" title=\"Rest Client Extension\">Rest Client Extension<\/a> invio la richiesta POST come mostrato nello screenshot seguente.<\/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=\"Come aggiungere endpoint personalizzati all&#039;API di WordPress\" ><\/a><\/p>\n<p>Qui abbiamo passato il token creato nel passaggio precedente come valore dell&#8217;intestazione di autorizzazione.<\/p>\n<p>Aggiungi il codice seguente per il <code>login()<\/code>metodo nel <code>functions.php<\/code>file.<\/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>Nota:<\/strong> se hai ricevuto un errore come &quot;Nessun percorso trovato corrispondente all&#8217;URL e al metodo di richiesta&quot;, devi aggiornare il tuo permalink.<\/p>\n<p>Dopo aver ricevuto il valore &#8216;success&#8217; per la chiave &#8216;status&#8217;, \u00e8 possibile registrare l&#8217;utente nell&#8217;applicazione frontend.<\/p>\n<h3>Crea un endpoint per la richiesta GET<\/h3>\n<p>Abbiamo visto come creare endpoint personalizzati per le richieste POST. Ora, esaminiamo la richiesta GET utilizzando l&#8217;API REST di WordPress. Per questo, scriver\u00f2 un&#8217;API che elimina un utente. Dal frontend, dovresti passare l&#8217;id di un utente come parametro GET.<\/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>Questo codice genera un endpoint API come YOUR_SITE_URL\/wp-json\/api\/delete_user\/id. A questo endpoint, invece di id, dovresti passare l&#8217;id effettivo di un utente.<\/p>\n<p>Il metodo di callback <code>delete_user<\/code>avr\u00e0 il codice seguente.<\/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>Spero che tu capisca come creare un endpoint personalizzato nell&#8217;API REST di WordPress. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.<\/p>\n<h4>articoli Correlati<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/una-guida-rapida-sull-api-rest-di-woocommerce\/\" title=\"Una guida rapida sull&#039;API REST di WooCommerce\">Una guida rapida sull&#8217;API REST di WooCommerce<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/come-visualizzare-prodotti-correlati-utilizzando-l-api-rest-di-woocommercecommerce\/\" title=\"Come visualizzare prodotti correlati utilizzando l&#039;API REST di WooCommerceCommerce\">Come visualizzare prodotti correlati utilizzando l&#8217;API REST di WooCommerceCommerce<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/it\/speech-to-text-utilizzando-amazon-transcribe-in-php\/\" title=\"Speech-to-Text utilizzando Amazon Transcribe in PHP\">Speech-to-Text utilizzando Amazon Transcribe in PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vuoi creare un endpoint personalizzato nell&#8217;API REST di WordPress? Durante la creazione di un&#8217;applicazione mobile o di un sito Web utilizzando un framework JavaScript<\/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":[611],"tags":[846],"class_list":["post-26212","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-7","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=26212"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/26212\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=26212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=26212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=26212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}