{"id":1259,"date":"2019-07-06T09:30:21","date_gmt":"2019-07-06T12:30:21","guid":{"rendered":"https:\/\/felipeelia.com\/br\/?p=1259"},"modified":"2024-08-05T19:49:40","modified_gmt":"2024-08-05T22:49:40","slug":"a-api-rest-do-wordpress","status":"publish","type":"post","link":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/","title":{"rendered":"A API REST do WordPress"},"content":{"rendered":"\n<p>Um dos meus objetivos, tanto aqui no blog quanto no <a rel=\"noreferrer noopener\" aria-label=\"canal do YouTube (abre numa nova aba)\" href=\"https:\/\/www.youtube.com\/c\/FelipeEliaWP\" target=\"_blank\">canal do YouTube<\/a>, \u00e9 desmistificar assuntos do WordPress que, mesmo sendo simples, acabam sendo vendidos como extremamente complicados. Um deles \u00e9 a API REST do WordPress.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>O artigo \u00e9 grande, mas quando terminar a leitura <strong>voc\u00ea vai entender tudo sobre a API REST do WP<\/strong>, ent\u00e3o pega um lanche e l\u00ea (ou assiste) a\u00ed!<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe loading=\"lazy\" title=\"A API REST do WordPress\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/iXczSUr7Y_s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-497ee600      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\t\u00cdndice\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#o-que-est\u00e1-acontecendo-aqui\" class=\"uagb-toc-link__trigger\">O que est\u00e1 acontecendo aqui?<\/a><li class=\"uagb-toc__list\"><a href=\"#como-usar-a-api-rest-do-wordpress\" class=\"uagb-toc-link__trigger\">Como usar a API REST do WordPress<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#cliente-consumindo-dados-de-sites-wp-externos\" class=\"uagb-toc-link__trigger\">Cliente: consumindo dados de sites WP externos<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#cliente-enviando-dados-para-sites-wp-externos\" class=\"uagb-toc-link__trigger\">Cliente: enviando dados para sites WP externos<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#servidor-disponibilizando-dados-do-seu-site-wordpress-para-sites-externos\" class=\"uagb-toc-link__trigger\">Servidor: disponibilizando dados do seu site WordPress para sites externos<\/a><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#conceitos-e-defini\u00e7\u00f5es-de-rest\" class=\"uagb-toc-link__trigger\">Conceitos e defini\u00e7\u00f5es de REST<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#o-que-\u00e9-interface\" class=\"uagb-toc-link__trigger\">O que \u00e9 Interface?<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#e-o-que-\u00e9-uma-api\" class=\"uagb-toc-link__trigger\">E o que \u00e9 uma API?<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#o-que-\u00e9-rest\" class=\"uagb-toc-link__trigger\">O que \u00e9 REST?<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#e-restful\" class=\"uagb-toc-link__trigger\">E RESTful?<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#namespace-routes-endpoints-e-schemas\" class=\"uagb-toc-link__trigger\">Namespace, routes, endpoints e schemas<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#namespace\" class=\"uagb-toc-link__trigger\">Namespace<\/a><\/li><\/ul><li class=\"uagb-toc__list\"><a href=\"#routes-e-endpoints\" class=\"uagb-toc-link__trigger\">Routes e endpoints<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#schema\" class=\"uagb-toc-link__trigger\">Schema<\/a><\/ul><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p>Antes de falar de nomes e conceitos, o melhor \u00e9 ver logo o que \u00e9 a API REST do WordPress. \u00c9 algo simples e que j\u00e1 \u00e9 nativo do WP desde a vers\u00e3o 4.7. Se voc\u00ea instalar o WP, sem plugin nenhum, e acessar <code>http:\/\/localhost\/?rest_route=\/wp\/v2\/posts<\/code> pelo seu navegador voc\u00ea vai ver um c\u00f3digo JSON. Se voc\u00ea jogar essa massaroca de c\u00f3digo em um site como o <a aria-label=\"JSON Formatter (abre numa nova aba)\" href=\"https:\/\/jsonformatter.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSON Formatter<\/a> ou olhar pela aba Network das ferramentas de desenvolvedor do seu navegador, o c\u00f3digo vai ser parecido com isso aqui:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#E6E6E6;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f2f2f;color:#d9d9d9\">JSON<\/span><span role=\"button\" tabindex=\"0\" data-code=\"[\n  {\n    &quot;id&quot;: 1,\n    &quot;date&quot;: &quot;2019-07-05T09:23:31&quot;,\n    &quot;date_gmt&quot;: &quot;2019-07-05T12:23:31&quot;,\n    &quot;guid&quot;: {\n      &quot;rendered&quot;: &quot;http:\/\/localhost\/?p=1&quot;\n    },\n    &quot;modified&quot;: &quot;2019-07-05T09:23:31&quot;,\n    &quot;modified_gmt&quot;: &quot;2019-07-05T12:23:31&quot;,\n    &quot;slug&quot;: &quot;ola-mundo&quot;,\n    &quot;status&quot;: &quot;publish&quot;,\n    &quot;type&quot;: &quot;post&quot;,\n    &quot;link&quot;: &quot;http:\/\/localhost\/ola-mundo\/&quot;,\n    &quot;title&quot;: {\n      &quot;rendered&quot;: &quot;Ol\u00e1, mundo!&quot;\n    },\n    &quot;content&quot;: {\n      &quot;rendered&quot;: &quot;\\n<p&gt;Boas-vindas ao WordPress. Esse \u00e9 o seu primeiro post. Edite-o ou exclua-o, e ent\u00e3o comece a escrever!<\/p&gt;\\n&quot;,\n      &quot;protected&quot;: false\n    },\n    &quot;excerpt&quot;: {\n      &quot;rendered&quot;: &quot;<p&gt;Boas-vindas ao WordPress. Esse \u00e9 o seu primeiro post. Edite-o ou exclua-o, e ent\u00e3o comece a escrever!<\/p&gt;\\n&quot;,\n      &quot;protected&quot;: false\n    },\n    &quot;author&quot;: 1,\n    &quot;featured_media&quot;: 0,\n    ...\n    &quot;categories&quot;: [\n      1\n    ],\n    &quot;tags&quot;: [],\n    ...\n  }\n]\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E6E6E6\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;id&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;date&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;2019-07-05T09:23:31&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;date_gmt&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;2019-07-05T12:23:31&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;guid&quot;<\/span><span style=\"color: #E6E6E6\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;rendered&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;http:\/\/localhost\/?p=1&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;modified&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;2019-07-05T09:23:31&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;modified_gmt&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;2019-07-05T12:23:31&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;slug&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;ola-mundo&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;status&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;publish&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;type&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;post&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;link&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;http:\/\/localhost\/ola-mundo\/&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;title&quot;<\/span><span style=\"color: #E6E6E6\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;rendered&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;Ol\u00e1, mundo!&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;content&quot;<\/span><span style=\"color: #E6E6E6\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;rendered&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&lt;p&gt;Boas-vindas ao WordPress. Esse \u00e9 o seu primeiro post. Edite-o ou exclua-o, e ent\u00e3o comece a escrever!&lt;\/p&gt;<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;protected&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #569CD6\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;excerpt&quot;<\/span><span style=\"color: #E6E6E6\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;rendered&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #CE9178\">&quot;&lt;p&gt;Boas-vindas ao WordPress. Esse \u00e9 o seu primeiro post. Edite-o ou exclua-o, e ent\u00e3o comece a escrever!&lt;\/p&gt;<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #9CDCFE\">&quot;protected&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #569CD6\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;author&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;featured_media&quot;<\/span><span style=\"color: #E6E6E6\">: <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #F44747\">...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;categories&quot;<\/span><span style=\"color: #E6E6E6\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    ],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">&quot;tags&quot;<\/span><span style=\"color: #E6E6E6\">: [],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #F44747\">...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Se voc\u00ea estiver usando URLs amig\u00e1veis (l\u00e1 no Painel, em Configura\u00e7\u00f5es \u2192Links permanentes), voc\u00ea pode acessar <code>http:\/\/localhost\/wp-json\/wp\/v2\/posts<\/code> para obter o mesmo resultado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que est\u00e1 acontecendo aqui?<\/h2>\n\n\n\n<p>Quando voc\u00ea digitou o endere\u00e7o e apertou enter, o seu navegador fez uma requisi\u00e7\u00e3o para o servidor (localhost, neste caso), atrav\u00e9s do protocolo <abbr title=\"&quot;Hypertext Transfer Protocol&quot; ou &quot;Protocolo de transfer\u00eancia de hipertexto&quot;\">HTTP<\/abbr> usando o m\u00e9todo, que tamb\u00e9m pode ser chamado de verbo, GET. Sim, \u00e9 o mesmo GET que a gente coloca no atributo <code>method<\/code> dos formul\u00e1rios. <strong>Resumindo, uma solicita\u00e7\u00e3o GET atrav\u00e9s do protocolo HTTP.<\/strong> Voc\u00ea usa isso todo dia, porque \u00e9 assim que a internet funciona. Na verdade \u00e9 assim que a <em>World Wide Web<\/em> funciona, porque internet \u00e9 a rede que conecta os computadores, mas essa diferen\u00e7a fica pra outro texto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como usar a API REST do WordPress<\/h2>\n\n\n\n<p>Como a API REST se baseia em uma comunica\u00e7\u00e3o cliente\/servidor, existem dois cen\u00e1rios, dependendo de que lado da comunica\u00e7\u00e3o voc\u00ea est\u00e1. Se voc\u00ea \u00e9 o cliente, voc\u00ea pode usar a API com qualquer linguagem de programa\u00e7\u00e3o que consiga se comunicar por HTTP. Se voc\u00ea \u00e9 o servidor, s\u00e3o grandes as chances do WordPress j\u00e1 implementar o que voc\u00ea precisa. Caso contr\u00e1rio, \u00e9 s\u00f3 criar um <em>endpoint<\/em> novo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Cliente:<\/em> consumindo dados de sites WP externos<\/h3>\n\n\n\n<p>Se voc\u00ea quer consumir os dados da API REST de uma outra instala\u00e7\u00e3o do WordPress, externa \u00e0 sua, <strong>tudo o que voc\u00ea tem que fazer \u00e9&#8230; uma solicita\u00e7\u00e3o GET atrav\u00e9s do protocolo HTTP<\/strong>. O WP tem algumas fun\u00e7\u00f5es nativas que podem ajudar a fazer isso de forma bem f\u00e1cil. O c\u00f3digo abaixo usa a fun\u00e7\u00e3o nativa <a rel=\"noreferrer noopener\" aria-label=\"wp_remote_get() (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\">wp_remote_get()<\/a> para consumir a API de demonstra\u00e7\u00e3o do WordPress. O fato de estarmos usando um WordPress para consumir dados da API REST de outro WordPress \u00e9 pura conveni\u00eancia. No mundo real, este c\u00f3digo poderia estar em qualquer linguagem ou <em>framework<\/em>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#E6E6E6;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f2f2f;color:#d9d9d9\">PHP<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Faz a solicita\u00e7\u00e3o GET para o endere\u00e7o.\n$request = wp_remote_get( 'http:\/\/demo.wp-api.org\/wp-json\/wp\/v2\/posts' );\n\/\/ Se n\u00e3o houve erro...\nif ( ! is_wp_error( $request ) ) {\n    \/\/ pegamos o &quot;corpo&quot; da resposta recebida...\n    $body = wp_remote_retrieve_body( $request );\n    \/\/ e transformamos de JSON em um array PHP normal.\n    $data = json_decode( $body );\n\n    \/\/ Se n\u00e3o houve erro nesta etapa, iteramos pelo array\n    \/\/ e montamos uma lista com t\u00edtulo e link.\n    if ( ! is_wp_error( $data ) ) {\n\t    echo '<ul&gt;';\n\t    foreach( $data as $rest_post ) {\n\t\t    echo '<li&gt;';\n\t\t\t    echo '<a href=&quot;' . esc_url( $rest_post-&gt;link ) . '&quot;&gt;' . $rest_post-&gt;title-&gt;rendered . '<\/a&gt;';\n\t\t    echo '<\/li&gt;';\n\t    }\n\t    echo '<\/ul&gt;';\n    }\n}\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Faz a solicita\u00e7\u00e3o GET para o endere\u00e7o.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$request<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">wp_remote_get<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #CE9178\">&#39;http:\/\/demo.wp-api.org\/wp-json\/wp\/v2\/posts&#39;<\/span><span style=\"color: #E6E6E6\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Se n\u00e3o houve erro...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">if<\/span><span style=\"color: #E6E6E6\"> ( <\/span><span style=\"color: #D4D4D4\">!<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">is_wp_error<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$request<\/span><span style=\"color: #E6E6E6\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #6A9955\">\/\/ pegamos o &quot;corpo&quot; da resposta recebida...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">$body<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">wp_remote_retrieve_body<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$request<\/span><span style=\"color: #E6E6E6\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #6A9955\">\/\/ e transformamos de JSON em um array PHP normal.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #9CDCFE\">$data<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">json_decode<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$body<\/span><span style=\"color: #E6E6E6\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #6A9955\">\/\/ Se n\u00e3o houve erro nesta etapa, iteramos pelo array<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #6A9955\">\/\/ e montamos uma lista com t\u00edtulo e link.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #E6E6E6\"> ( <\/span><span style=\"color: #D4D4D4\">!<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">is_wp_error<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$data<\/span><span style=\"color: #E6E6E6\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;ul&gt;&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t    <\/span><span style=\"color: #C586C0\">foreach<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$data<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">as<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">$rest_post<\/span><span style=\"color: #E6E6E6\"> ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t\t    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;li&gt;&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t\t\t    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;a href=&quot;&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">esc_url<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$rest_post<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #9CDCFE\">link<\/span><span style=\"color: #E6E6E6\"> ) <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&quot;&gt;&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">$rest_post<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #9CDCFE\">title<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #9CDCFE\">rendered<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;\/a&gt;&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t\t    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;\/li&gt;&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">\t    <\/span><span style=\"color: #DCDCAA\">echo<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;&lt;\/ul&gt;&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Cliente:<\/em> enviando dados para sites WP externos<\/h3>\n\n\n\n<p>Se voc\u00ea precisa enviar um dado para que ele seja gravado no site WordPress externo \u00e9 preciso dar um passo a mais. Isso acontece por dois motivos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voc\u00ea precisa provar que \u00e9 um usu\u00e1rio WP com permiss\u00f5es para isso e<\/li>\n\n\n\n<li>O m\u00e9todo GET \u00e9 usado para obter dados. Para enviar \u00e9 preciso usar outro verbo, como o POST, por exemplo.<\/li>\n<\/ul>\n\n\n\n<p><strong>Nativamente, o WordPress s\u00f3 d\u00e1 conta de autentica\u00e7\u00f5es por cookie<\/strong>, ent\u00e3o voc\u00ea vai precisar estar conectado ao site na sua m\u00e1quina e a integra\u00e7\u00e3o precisa ser feita no lado do cliente atrav\u00e9s de JavaScript. Quase sempre esse n\u00e3o \u00e9 o cen\u00e1rio que voc\u00ea tem na m\u00e3o.<\/p>\n\n\n\n<p>A documenta\u00e7\u00e3o oficial indica alguns <a rel=\"noreferrer noopener\" aria-label=\"plugins que ajudam na autentica\u00e7\u00e3o (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/using-the-rest-api\/authentication\/#authentication-plugins\" target=\"_blank\">plugins que ajudam na autentica\u00e7\u00e3o<\/a>. O mais simples para come\u00e7ar \u00e9 o <a rel=\"noreferrer noopener\" aria-label=\"Basic-Auth (abre numa nova aba)\" href=\"https:\/\/github.com\/WP-API\/Basic-Auth\" target=\"_blank\">Basic-Auth<\/a>, mas aten\u00e7\u00e3o: com esse plugin o usu\u00e1rio e senha \u00e9 enviado em todas as requisi\u00e7\u00f5es, por isso <strong>s\u00f3 use o Basic-Auth para testes ou em sites com HTTPS<\/strong>.<\/p>\n\n\n\n<p>Depois de baixar e ativar o plugin, voc\u00ea pode usar um c\u00f3digo como este para criar um novo post. Veja os dados de autentica\u00e7\u00e3o e o uso da fun\u00e7\u00e3o nativa <a rel=\"noreferrer noopener\" aria-label=\"wp_remote_post() (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_post\/\" target=\"_blank\">wp_remote_post()<\/a>. A lista completa de atributos que voc\u00ea pode passar no corpo da requisi\u00e7\u00e3o (o par\u00e2metro <em>body<\/em>) est\u00e1 na <a rel=\"noreferrer noopener\" aria-label=\"documenta\u00e7\u00e3o oficial (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/posts\/#create-a-post\" target=\"_blank\">documenta\u00e7\u00e3o oficial<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#E6E6E6;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f2f2f;color:#d9d9d9\">PHP<\/span><span role=\"button\" tabindex=\"0\" data-code=\"$username = 'admin'; \/\/ N\u00e3o use admin\/admin em produ\u00e7\u00e3o!\n$password = 'admin';\n$response = wp_remote_post(\n    'http:\/\/localhost\/wp-json\/wp\/v2\/posts',\n    [\n        'headers' =&gt; [\n            'Authorization' =&gt; 'Basic ' . base64_encode( $username . ':' . $password ),\n        ],\n        'body'    =&gt; [\n            'title'   =&gt; 'Meu novo post',\n            'content' =&gt; 'Texto do post',\n        ],\n    ]\n);\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">$username<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;admin&#39;<\/span><span style=\"color: #E6E6E6\">; <\/span><span style=\"color: #6A9955\">\/\/ N\u00e3o use admin\/admin em produ\u00e7\u00e3o!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$password<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;admin&#39;<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">$response<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">wp_remote_post<\/span><span style=\"color: #E6E6E6\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #CE9178\">&#39;http:\/\/localhost\/wp-json\/wp\/v2\/posts&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #CE9178\">&#39;headers&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #CE9178\">&#39;Authorization&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;Basic &#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">base64_encode<\/span><span style=\"color: #E6E6E6\">( <\/span><span style=\"color: #9CDCFE\">$username<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;:&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">$password<\/span><span style=\"color: #E6E6E6\"> ),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        ],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #CE9178\">&#39;body&#39;<\/span><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #CE9178\">&#39;title&#39;<\/span><span style=\"color: #E6E6E6\">   <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;Meu novo post&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #CE9178\">&#39;content&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;Texto do post&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        ],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Para servidores em produ\u00e7\u00e3o, o ideal \u00e9 evitar esse usu\u00e1rio e senha indo e vindo toda hora. Por isso, <strong>o recomend\u00e1vel \u00e9 usar um plugin como o <\/strong><a aria-label=\"JWT Authentication for WP REST API (abre numa nova aba)\" href=\"https:\/\/wordpress.org\/plugins\/jwt-authentication-for-wp-rest-api\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>JWT Authentication for WP REST API<\/strong><\/a>. Depois de autenticar o usu\u00e1rio, ele gera um token.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Servidor:<\/em> disponibilizando dados do seu site WordPress para sites externos<\/h3>\n\n\n\n<p>Por padr\u00e3o, o <a rel=\"noreferrer noopener\" aria-label=\"WordPress j\u00e1 fornece muitos endpoints (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/\" target=\"_blank\">WordPress j\u00e1 fornece muitos <\/a><em><a rel=\"noreferrer noopener\" aria-label=\"WordPress j\u00e1 fornece muitos endpoints (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/\" target=\"_blank\">endpoints<\/a><\/em> (veja a parte de <a href=\"#conceitos-e-definicoes-da-api-rest\">Conceitos e defini\u00e7\u00f5es<\/a> para saber mais) e existem alguns que ainda n\u00e3o est\u00e3o na documenta\u00e7\u00e3o, como o <code>\/wp\/v2\/search<\/code>. Para habilitar a API REST para o seu <em>Custom Post Type<\/em> basta colocar <code>'show_in_rest' =&gt; true<\/code> nos argumentos passados para a fun\u00e7\u00e3o <a rel=\"noreferrer noopener\" aria-label=\"register_post_type() (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_type\/\" target=\"_blank\">register_post_type()<\/a>. Se o CPT \u00e9 registrado por outro plugin ou pelo tema (mesmo isso sendo <a href=\"https:\/\/felipeelia.com\/br\/o-que-seu-tema-wordpress-nao-deve-ter\/\">territ\u00f3rio dos plugins<\/a>), voc\u00ea pode alterar os argumentos usando o filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/register_post_type_args\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"register_post_type_args (abre numa nova aba)\">register_post_type_args<\/a>.<\/p>\n\n\n\n<p>Se o que voc\u00ea precisa vai al\u00e9m do fornecido pelo pr\u00f3prio WordPress, \u00e9 s\u00f3 usar a action <a rel=\"noreferrer noopener\" aria-label=\"rest_api_init (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/rest_api_init\/\" target=\"_blank\">rest_api_init<\/a> e a fun\u00e7\u00e3o <a rel=\"noreferrer noopener\" aria-label=\"register_rest_route() (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\/\" target=\"_blank\">register_rest_route()<\/a>.  <a rel=\"noreferrer noopener\" aria-label=\"documenta\u00e7\u00e3o (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/adding-custom-endpoints\/\" target=\"_blank\">Esta p\u00e1gina da documenta\u00e7\u00e3o<\/a> explica passo a passo o que \u00e9 preciso fazer, mas basicamente voc\u00ea vai criar um c\u00f3digo parecido com este abaixo e implementar essa fun\u00e7\u00e3o <code>minha_funcao()<\/code>, que ser\u00e1 a respons\u00e1vel pelo recebimento e\/ou envio dos dados. O par\u00e2metro aceita qualquer <em>callable<\/em>, um conceito que eu expliquei <a href=\"https:\/\/youtu.be\/2uJOOv9Wdxg\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"neste v\u00eddeo (abre numa nova aba)\">neste v\u00eddeo<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#E6E6E6;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f2f2f;color:#d9d9d9\">PHP<\/span><span role=\"button\" tabindex=\"0\" data-code=\"add_action(\n    'rest_api_init',\n    function () {\n        register_rest_route(\n            'meuplugin\/v1',\n            '\/autor\/(?P<id&gt;\\d+)',\n            array(\n              'methods' =&gt; 'GET',\n              'callback' =&gt; 'minha_funcao', \/\/ Esse callable ser\u00e1 chamado para responder as chamadas para '\/wp-json\/meuplugin\/v1\/autor\/<id&gt;'.\n            )\n        );\n    }\n);\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">add_action<\/span><span style=\"color: #E6E6E6\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #CE9178\">&#39;rest_api_init&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #569CD6\">function<\/span><span style=\"color: #E6E6E6\"> () {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #DCDCAA\">register_rest_route<\/span><span style=\"color: #E6E6E6\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #CE9178\">&#39;meuplugin\/v1&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #CE9178\">&#39;\/autor\/(?P&lt;id&gt;\\d+)&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #DCDCAA\">array<\/span><span style=\"color: #E6E6E6\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">              <\/span><span style=\"color: #CE9178\">&#39;methods&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;GET&#39;<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">              <\/span><span style=\"color: #CE9178\">&#39;callback&#39;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=&gt;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&#39;minha_funcao&#39;<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #6A9955\">\/\/ Esse callable ser\u00e1 chamado para responder as chamadas para &#39;\/wp-json\/meuplugin\/v1\/autor\/&lt;id&gt;&#39;.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>O primeiro argumento de <code>register_rest_route()<\/code> \u00e9 o <em>namespace<\/em> e o segundo \u00e9 a rota (ou <em>route<\/em>). Vamos para a se\u00e7\u00e3o de <a href=\"#conceitos-e-definicoes-da-api-rest\">Conceitos e defini\u00e7\u00f5es<\/a>, porque saber o que \u00e9 cada uma dessas coisas facilita (muito) o entendimento da documenta\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conceitos-e-definicoes-da-api-rest\">Conceitos e defini\u00e7\u00f5es de REST<\/h2>\n\n\n\n<p>Come\u00e7ando do come\u00e7o, para entender o que \u00e9 a API REST vamos precisar entender o que \u00e9 Interface, o I de <a href=\"https:\/\/felipeelia.com\/br\/o-que-e-uma-api\/\">API<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9 <em>Interface<\/em>?<\/h3>\n\n\n\n<p>Uma <strong>interface \u00e9 a camada externa de alguma coisa, que aceita entradas e fornece sa\u00eddas<\/strong> (<em>inputs<\/em> e <em>outputs<\/em>). Sim, \u00e9 um conceito extremamente amplo, mas \u00e9 isso a\u00ed mesmo. Exemplos de interfaces s\u00e3o o seu teclado, seu monitor, as telas do seu site e as tomadas da sua casa.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>O conceito de interface est\u00e1 diretamente relacionado ao conceito de <a href=\"https:\/\/felipeelia.com\/br\/nao-use-o-wordpress-como-caixa-preta\/\">caixa-preta<\/a>: N\u00e3o importa como a coisa \u00e9 implementada, desde que dada uma determinada entrada, a sa\u00edda seja a esperada.<\/p>\n<\/blockquote>\n\n\n\n<p>Ent\u00e3o n\u00e3o importa a cor dos fios que levam a eletricidade at\u00e9 a tomada, o que importa \u00e9 funcionar quando plugar seu aparelho l\u00e1. Da mesma forma, n\u00e3o importa como est\u00e1 implementado o <em>backend<\/em> de uma tela, o que importa \u00e9 acontecer o que se espera quando um bot\u00e3o \u00e9 apertado.<\/p>\n\n\n\n<p>O &#8220;n\u00e3o importa&#8221; aqui \u00e9 s\u00f3 para o conceito de caixa-preta, ok? Como profissional WordPress, a forma como o WP implementa as coisas deve importar e muito para voc\u00ea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E o que \u00e9 uma API?<\/h3>\n\n\n\n<p>API \u00e9 o acr\u00f4nimo de <em>Application Programming Interface<\/em>, ou seja, Interface de Programa\u00e7\u00e3o de Aplica\u00e7\u00e3o. Se voc\u00ea for como eu, essas siglas raramente dizem alguma coisa de \u00fatil. Neste caso, seu site WordPress, por exemplo, \u00e9 <strong>uma aplica\u00e7\u00e3o, que tem uma interface acess\u00edvel atrav\u00e9s de programa\u00e7\u00e3o.<\/strong><\/p>\n\n\n\n<p>Quando voc\u00ea chama qualquer fun\u00e7\u00e3o nativa do WordPress, &#8220;n\u00e3o importa&#8221; como aquela fun\u00e7\u00e3o foi implementada, o que importa \u00e9 que ela fa\u00e7a o que se espera. Se eu chamar <code>wp_insert_post()<\/code> com os par\u00e2metros certos, eu n\u00e3o estou interessado em como o WP vai processar isso, eu s\u00f3 quero ter certeza de que o post vai ser criado. Ent\u00e3o, usando programa\u00e7\u00e3o, estou fornecendo um <em>input<\/em> e espero o <em>output<\/em> correto.<\/p>\n\n\n\n<p>Tem um post aqui no blog falando mais detalhes sobre <a href=\"https:\/\/felipeelia.com\/br\/o-que-e-uma-api\/\">o que \u00e9 uma API<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9 REST?<\/h3>\n\n\n\n<p>Se voc\u00ea j\u00e1 viu algum desenho animado, sabe que o R de R.I.P. \u00e9 <em>Rest<\/em> e quer dizer descansar. O REST da API n\u00e3o tem absolutamente nada a ver com isso (e esse \u00e9 um dos motivos para sempre escrever em letras mai\u00fasculas).<\/p>\n\n\n\n<p>REST neste caso vem de <em>REpresentational State Transfer<\/em>, ou seja, Transfer\u00eancia de Estado Representacional. Se a sigla de API n\u00e3o queria dizer muito, essa ent\u00e3o n\u00e3o diz nada.<\/p>\n\n\n\n<p>A explica\u00e7\u00e3o \u00e9 a seguinte: dado um recurso, como posts, p\u00e1ginas, usu\u00e1rios, categorias, etc., criamos uma representa\u00e7\u00e3o textual do estado atual deste recurso. Qual \u00e9 o t\u00edtulo e texto do post ou o nome de um usu\u00e1rio s\u00e3o atributos que formam esse &#8220;estado atual&#8221; do recurso e colocando isso em um JSON temos uma representa\u00e7\u00e3o textual. <strong>REST \u00e9 a transfer\u00eancia destas representa\u00e7\u00f5es do estado de um recurso<\/strong> ou, como na sigla, de um estado representacional.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">E RESTful?<\/h3>\n\n\n\n<p>Sabe <em>peaceful<\/em>, <em>helpful<\/em>, <em>painful<\/em> e <em>careful<\/em>? Ent\u00e3o, o sufixo <em>-ful<\/em> em ingl\u00eas indica a qualidade de alguma coisa. <em>Peaceful<\/em> \u00e9 aquilo que d\u00e1 paz (<em>peace<\/em>), <em>helpful<\/em> \u00e9 aquilo que fornece ajuda (<em>help<\/em>) e assim por diante, mais ou menos como o nosso <em>-oso<\/em> nas palavras doloroso e cuidadoso.<\/p>\n\n\n\n<p><em><strong>RESTful<\/strong><\/em><strong> ent\u00e3o \u00e9 tudo aquilo que implementa a arquitetura REST, s\u00f3 isso.<\/strong> Se um site tem API REST, o site \u00e9 RESTful. Mais uma daquelas pegadinhas como <em>design<\/em> e <em>designer<\/em>.<\/p>\n\n\n\n<p><strong>Cuidado para n\u00e3o usar <em>REST full<\/em> ou <em>RESTfull<\/em>.<\/strong> <em>Full<\/em> em ingl\u00eas quer dizer cheio ou completo e n\u00e3o tem nenhuma liga\u00e7\u00e3o com o que a gente est\u00e1 falando aqui.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Namespace<\/em>, <em>routes, endpoints<\/em> e <em>schemas<\/em><\/h3>\n\n\n\n<p>Existe um <a rel=\"noreferrer noopener\" aria-label=\"gloss\u00e1rio na documenta\u00e7\u00e3o (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/glossary\/\" target=\"_blank\">gloss\u00e1rio na documenta\u00e7\u00e3o<\/a>, j\u00e1 que voc\u00ea pode esbarrar em algumas palavras novas durante o desenvolvimento. Eu vou deixar aqui a explica\u00e7\u00e3o de algumas dessas palavras para facilitar. Se houver alguma que eu n\u00e3o expliquei e voc\u00ea sentiu falta, deixe nos coment\u00e1rios que eu atualizo o texto.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><em>Namespace<\/em><\/h4>\n\n\n\n<p>Nesse caso \u00e9 uma string que vai isolar as funcionalidades por grupos. O namespace padr\u00e3o \u00e9 <code>wp\/v2<\/code>, o WooCommerce atualmente usa <code>wc\/v3<\/code> e voc\u00ea pode usar <code>cliente\/v1<\/code> ou <code>plugin\/v1<\/code>, variando o <code>v1<\/code> conforme o progresso e publica\u00e7\u00e3o do c\u00f3digo. \u00c9 o primeiro par\u00e2metro que voc\u00ea passa ao registrar uma nova <em>route<\/em> com a fun\u00e7\u00e3o <code>register_rest_route()<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Routes<\/em> e <em>endpoints<\/em><\/h3>\n\n\n\n<p>Uma rota ou uma <em>route<\/em> \u00e9 o segundo par\u00e2metro passado para <code>register_rest_route()<\/code>. Ela \u00e9 a string que disponibiliza uma funcionalidade e pode ter um ou mais <em>endpoints<\/em> associados a ela.<\/p>\n\n\n\n<p>Um exemplo, tirado da <a rel=\"noreferrer noopener\" aria-label=\"documenta\u00e7\u00e3o (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/routes-and-endpoints\/#routes-vs-endpoints\" target=\"_blank\">documenta\u00e7\u00e3o<\/a>, \u00e9 o endere\u00e7o <code>http:\/\/example.com\/wp-json\/wp\/v2\/posts\/123<\/code>. Nele existe apenas uma rota, que \u00e9 <code>wp\/v2\/posts\/123<\/code>. Esta mesma rota, dependendo do verbo\/m\u00e9todo utilizado na requisi\u00e7\u00e3o, tem 3 <em>endpoints<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se voc\u00ea usar GET vai receber como retorno os dados de um post, fornecido pelo m\u00e9todo <code>get_item<\/code>;<\/li>\n\n\n\n<li>Se usar o verbo POST ou o verbo PUT, voc\u00ea pode atualizar um post. O m\u00e9todo <code>update_item<\/code> vai ser usado neste caso e<\/li>\n\n\n\n<li>Se usar o verbo DELETE o post ser\u00e1 exclu\u00eddo pelo m\u00e9todo <code>delete_item<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Ou seja, <strong>essa mesma rota exp\u00f5e tr\u00eas <em>endpoints<\/em><\/strong>, que voc\u00ea acessa dependendo do m\u00e9todo\/verbo utilizado na requisi\u00e7\u00e3o. Voc\u00ea pode ver mais sobre esse caso olhando o m\u00e9todo <code>register_routes()<\/code> da <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/WP_REST_Posts_Controller\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"classe WP_REST_Posts_Controller (abre numa nova aba)\">classe WP_REST_Posts_Controller<\/a>.<\/p>\n\n\n\n<p>No texto eu usei <code>wp_remote_get()<\/code> e <code>wp_remote_post()<\/code>, mas voc\u00ea pode usa a fun\u00e7\u00e3o <a rel=\"noreferrer noopener\" aria-label=\"wp_remote_request()  (abre numa nova aba)\" href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_request\/\" target=\"_blank\">wp_remote_request()<\/a> passando um verbo qualquer atrav\u00e9s do par\u00e2metro <code>method<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>Schema<\/em><\/h3>\n\n\n\n<p>Um esquema, ou <em>schema<\/em>, \u00e9 a representa\u00e7\u00e3o dos dados que formam a resposta da API. O <em>schema<\/em> de Posts diz que os campos <code>id<\/code>, <code>title<\/code>, <code>content<\/code>, <code>author<\/code>, etc., far\u00e3o parte da resposta fornecida API. Esses dados s\u00e3o \u00fateis tanto para humanos que precisam criar uma integra\u00e7\u00e3o com a API como para integra\u00e7\u00f5es automatizadas.<\/p>\n\n\n\n<p>Para ter acesso ao esquema, \u00e9 s\u00f3 enviar uma requisi\u00e7\u00e3o para o endere\u00e7o usando o m\u00e9todo OPTIONS. Enquanto o navegador \u00e9 \u00f3timo para fazer requisi\u00e7\u00f5es GET, nem sempre \u00e9 t\u00e3o f\u00e1cil testar requisi\u00e7\u00f5es com esses verbos mais &#8220;incomuns&#8221;. Para isso eu recomendo o programa <a rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\" href=\"https:\/\/www.getpostman.com\/downloads\/\" target=\"_blank\">Postman<\/a>, dispon\u00edvel para Linux, Windows e Mac. De forma muito simples, ele permite que voc\u00ea formate a requisi\u00e7\u00e3o como precisar, alterando verbo, corpo e cabe\u00e7alhos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p>Gostou? N\u00e3o esquece de comentar e compartilhar!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[30],"tags":[104],"class_list":["post-1259","post","type-post","status-publish","format-standard","hentry","category-wordpress-br","tag-api-rest","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A API REST do WordPress | Felipe Elia<\/title>\n<meta name=\"description\" content=\"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A API REST do WordPress | Felipe Elia\" \/>\n<meta property=\"og:description\" content=\"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/\" \/>\n<meta property=\"og:site_name\" content=\"Felipe Elia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/felipe.elia\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/felipe.elia\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-06T12:30:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-05T22:49:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felipeelia.com\/wp-content\/uploads\/2017\/09\/query-posts.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felipe Elia\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/felipe_elia\" \/>\n<meta name=\"twitter:site\" content=\"@felipe_elia\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felipe Elia\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/\"},\"author\":{\"name\":\"Felipe Elia\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#\\\/schema\\\/person\\\/1ff49bb0ede58bc73cb5b8caf7afc6b0\"},\"headline\":\"A API REST do WordPress\",\"datePublished\":\"2019-07-06T12:30:21+00:00\",\"dateModified\":\"2024-08-05T22:49:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/\"},\"wordCount\":2007,\"commentCount\":24,\"publisher\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#\\\/schema\\\/person\\\/1ff49bb0ede58bc73cb5b8caf7afc6b0\"},\"keywords\":[\"API REST\"],\"articleSection\":[\"WordPress\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/\",\"url\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/\",\"name\":\"A API REST do WordPress | Felipe Elia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#website\"},\"datePublished\":\"2019-07-06T12:30:21+00:00\",\"dateModified\":\"2024-08-05T22:49:40+00:00\",\"description\":\"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/br\\\/a-api-rest-do-wordpress\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/felipeelia.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A API REST do WordPress\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#website\",\"url\":\"https:\\\/\\\/felipeelia.com\\\/\",\"name\":\"Felipe Elia\",\"description\":\"Programa\u00e7\u00e3o com WordPress de um jeito f\u00e1cil, do b\u00e1sico ao avan\u00e7ado\",\"publisher\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#\\\/schema\\\/person\\\/1ff49bb0ede58bc73cb5b8caf7afc6b0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/felipeelia.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/felipeelia.com\\\/#\\\/schema\\\/person\\\/1ff49bb0ede58bc73cb5b8caf7afc6b0\",\"name\":\"Felipe Elia\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/felipeelia.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/avatar-400x400-1.jpg\",\"url\":\"https:\\\/\\\/felipeelia.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/avatar-400x400-1.jpg\",\"contentUrl\":\"https:\\\/\\\/felipeelia.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/avatar-400x400-1.jpg\",\"width\":400,\"height\":400,\"caption\":\"Felipe Elia\"},\"logo\":{\"@id\":\"https:\\\/\\\/felipeelia.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/avatar-400x400-1.jpg\"},\"description\":\"Associate Director of Platform Engineering na 10up, WordPress Core Contributor, Global Polyglots Mentor na comunidade internacional do WordPress e Locale Manager na comunidade WordPress Brasil.\",\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/felipe.elia\",\"https:\\\/\\\/www.instagram.com\\\/felipe.elia\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/felipeelia\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/felipe_elia\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCD_26rOE3ClALcZreTkyIoQ\"],\"url\":\"https:\\\/\\\/felipeelia.com\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A API REST do WordPress | Felipe Elia","description":"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/","og_locale":"pt_BR","og_type":"article","og_title":"A API REST do WordPress | Felipe Elia","og_description":"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!","og_url":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/","og_site_name":"Felipe Elia","article_publisher":"https:\/\/www.facebook.com\/felipe.elia","article_author":"https:\/\/www.facebook.com\/felipe.elia","article_published_time":"2019-07-06T12:30:21+00:00","article_modified_time":"2024-08-05T22:49:40+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/felipeelia.com\/wp-content\/uploads\/2017\/09\/query-posts.jpg","type":"image\/jpeg"}],"author":"Felipe Elia","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/felipe_elia","twitter_site":"@felipe_elia","twitter_misc":{"Escrito por":"Felipe Elia","Est. tempo de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/#article","isPartOf":{"@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/"},"author":{"name":"Felipe Elia","@id":"https:\/\/felipeelia.com\/#\/schema\/person\/1ff49bb0ede58bc73cb5b8caf7afc6b0"},"headline":"A API REST do WordPress","datePublished":"2019-07-06T12:30:21+00:00","dateModified":"2024-08-05T22:49:40+00:00","mainEntityOfPage":{"@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/"},"wordCount":2007,"commentCount":24,"publisher":{"@id":"https:\/\/felipeelia.com\/#\/schema\/person\/1ff49bb0ede58bc73cb5b8caf7afc6b0"},"keywords":["API REST"],"articleSection":["WordPress"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/","url":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/","name":"A API REST do WordPress | Felipe Elia","isPartOf":{"@id":"https:\/\/felipeelia.com\/#website"},"datePublished":"2019-07-06T12:30:21+00:00","dateModified":"2024-08-05T22:49:40+00:00","description":"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!","breadcrumb":{"@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/felipeelia.com\/br\/a-api-rest-do-wordpress\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/felipeelia.com\/"},{"@type":"ListItem","position":2,"name":"A API REST do WordPress"}]},{"@type":"WebSite","@id":"https:\/\/felipeelia.com\/#website","url":"https:\/\/felipeelia.com\/","name":"Felipe Elia","description":"Programa\u00e7\u00e3o com WordPress de um jeito f\u00e1cil, do b\u00e1sico ao avan\u00e7ado","publisher":{"@id":"https:\/\/felipeelia.com\/#\/schema\/person\/1ff49bb0ede58bc73cb5b8caf7afc6b0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felipeelia.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":["Person","Organization"],"@id":"https:\/\/felipeelia.com\/#\/schema\/person\/1ff49bb0ede58bc73cb5b8caf7afc6b0","name":"Felipe Elia","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/felipeelia.com\/wp-content\/uploads\/2023\/06\/avatar-400x400-1.jpg","url":"https:\/\/felipeelia.com\/wp-content\/uploads\/2023\/06\/avatar-400x400-1.jpg","contentUrl":"https:\/\/felipeelia.com\/wp-content\/uploads\/2023\/06\/avatar-400x400-1.jpg","width":400,"height":400,"caption":"Felipe Elia"},"logo":{"@id":"https:\/\/felipeelia.com\/wp-content\/uploads\/2023\/06\/avatar-400x400-1.jpg"},"description":"Associate Director of Platform Engineering na 10up, WordPress Core Contributor, Global Polyglots Mentor na comunidade internacional do WordPress e Locale Manager na comunidade WordPress Brasil.","sameAs":["https:\/\/www.facebook.com\/felipe.elia","https:\/\/www.instagram.com\/felipe.elia\/","https:\/\/www.linkedin.com\/in\/felipeelia\/","https:\/\/x.com\/https:\/\/twitter.com\/felipe_elia","https:\/\/www.youtube.com\/channel\/UCD_26rOE3ClALcZreTkyIoQ"],"url":"https:\/\/felipeelia.com\/author\/admin\/"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"ocean-thumb-m":false,"ocean-thumb-ml":false,"ocean-thumb-l":false,"yarpp-thumbnail":false},"uagb_author_info":{"display_name":"Felipe Elia","author_link":"https:\/\/felipeelia.com\/author\/admin\/"},"uagb_comment_info":24,"uagb_excerpt":"Se voc\u00ea nunca mexeu com a API REST do WordPress, leia esse texto que eu tenho CERTEZA de que voc\u00ea vai querer um projetinho s\u00f3 para brincar com esse recurso fant\u00e1stico do WP!","_links":{"self":[{"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/posts\/1259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/comments?post=1259"}],"version-history":[{"count":1,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/posts\/1259\/revisions"}],"predecessor-version":[{"id":3273,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/posts\/1259\/revisions\/3273"}],"wp:attachment":[{"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/media?parent=1259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/categories?post=1259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felipeelia.com\/wp-json\/wp\/v2\/tags?post=1259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}