{"id":30133,"date":"2019-10-18T06:16:16","date_gmt":"2019-10-18T13:16:16","guid":{"rendered":"https:\/\/kinsta.com\/?p=54548"},"modified":"2023-08-22T04:45:49","modified_gmt":"2023-08-22T07:45:49","slug":"wordpress-get_posts","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/","title":{"rendered":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens"},"content":{"rendered":"<p>O WordPress <code>get_posts<\/code> \u00e9 uma fun\u00e7\u00e3o poderosa que permite <a href=\"https:\/\/kinsta.com\/pt\/blog\/contrate-um-desenvolvedor-do-wordpress\/\">aos desenvolvedores<\/a> recuperar partes do conte\u00fado do <a href=\"https:\/\/kinsta.com\/pt\/blog\/banco-de-dados-wordpress\/\">banco de dados do WordPress<\/a>. Voc\u00ea pode especificar com o maior detalhe quais posts, p\u00e1ginas e <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-publicacoes-personalizadas-wordpress\/\">tipos de posts personalizados<\/a> voc\u00ea est\u00e1 procurando, obter seu conjunto de resultados personalizado, ent\u00e3o filtrar e ordenar os itens como um ninja PHP\/MySQL.<\/p>\n<p>Mas n\u00e3o se assuste se voc\u00ea n\u00e3o for um profissional de PHP, h\u00e1 in\u00fameros <a href=\"https:\/\/kinsta.com\/pt\/blog\/tutoriais-de-php\/\">tutoriais PHP que voc\u00ea pode assistir ou ler<\/a> e aprender a linguagem. Voc\u00ea s\u00f3 precisa de um pouco de <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-php-morreu\/\">conhecimento de PHP<\/a> para criar listas personalizadas de posts para exibir em seu site, j\u00e1 que a fun\u00e7\u00e3o <code>get_posts<\/code> mant\u00e9m um array de par\u00e2metros que permitem construir consultas simples ou avan\u00e7adas.<\/p>\n<p>A utiliza\u00e7\u00e3o do WordPress <code>get_posts<\/code> \u00e9 um processo em duas etapas:<\/p>\n<ul>\n<li>Primeiro, voc\u00ea tem que construir sua consulta personalizada. Na verdade, ele n\u00e3o vai parecer uma consulta MySQL, e voc\u00ea n\u00e3o vai escrever nenhuma instru\u00e7\u00e3o <code>SELECT<\/code>. Voc\u00ea s\u00f3 precisa definir um array de par\u00e2metros e pass\u00e1-lo para a fun\u00e7\u00e3o <code>get_posts<\/code>. O WordPress converte esse array em uma consulta MySQL real e <strong>segura<\/strong>, executa-o contra o banco de dados e retorna um array de posts.<\/li>\n<li>Segundo, voc\u00ea tem que atravessar o conjunto de resultados retornados por <code>get_posts<\/code> com um ciclo foreach.<\/li>\n<\/ul>\n<p>Dito isto, neste post, vamos primeiro mergulhar nos conceitos chave mencionados acima, especificamente como funciona o <code>get_posts<\/code>, como construir uma consulta personalizada, e como mostrar os dados no front site.<br \/>\nEnt\u00e3o, vou fornecer um exemplo do mundo real com um trecho de c\u00f3digo que voc\u00ea pode pegar, editar e usar em seu ambiente de teste e desenvolvimento.<\/p>\n<p>Nota: N\u00f3s geralmente diferenciamos entre postagens, p\u00e1ginas e tipos de postagens personalizados. Neste artigo, <strong>usamos o termo <em>&#8216;posts&#8217;<\/em> para posts de blogs regulares, bem como para p\u00e1ginas e tipos de posts personalizados<\/strong>. Todos esses tipos de lan\u00e7amento s\u00e3o gravados na tabela <em>&#8216;wp_posts&#8217;<\/em> do banco de dados. A principal diferen\u00e7a entre os tipos de lan\u00e7amento est\u00e1 no valor do campo <em>&#8216;post_type&#8217;<\/em>. <strong>Do ponto de vista de um desenvolvedor, publica\u00e7\u00f5es, p\u00e1ginas e tipos de publica\u00e7\u00f5es personalizados s\u00e3o todas publica\u00e7\u00f5es<\/strong>.<\/p>\n<ul>\n<li><a href=\"#get-posts\">Introdu\u00e7\u00e3o \u00e0 Fun\u00e7\u00e3o get_posts do WordPress<\/a><\/li>\n<li><a href=\"#parameters\">Como Construir Consultas com Par\u00e2metros get_posts<\/a><\/li>\n<li><a href=\"#display\">Como Exibir Dados get_posts<\/a><\/li>\n<li><a href=\"#example\">Exemplo do Mundo Real: Mostrando uma Lista Altamente Personalizada de Mensagens com um C\u00f3digo de Atalho Personalizado<\/a><\/li>\n<\/ul>\n<h2 id=\"get-posts\">Introdu\u00e7\u00e3o \u00e0 Fun\u00e7\u00e3o get_posts do WordPress<\/h2>\n<p>O Codex descreve <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_posts\/\">a fun\u00e7\u00e3o <code>get_posts<\/code><\/a> da seguinte forma:<\/p>\n<blockquote><p>Recupera um array das \u00faltimas mensagens, ou mensagens que correspondam aos crit\u00e9rios dados.<\/p><\/blockquote>\n<p>Podemos usar <code>get_posts<\/code> desta forma:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'numberposts'\t=&gt; 20,\n\t'category'\t\t=&gt; 4\n);\n$my_posts = get_posts( $args );\n\nif( ! empty( $my_posts ) ){\n\t$output = '&lt;ul&gt;';\n\tforeach ( $my_posts as $p ){\n\t\t$output .= '&lt;li&gt;&lt;a href=\"' . get_permalink( $p-&gt;ID ) . '\"&gt;' \n\t\t. $p-&gt;post_title . '&lt;\/a&gt;&lt;\/li&gt;';\n\t}\n\t$output .= '&lt;ul&gt;';\n}<\/code><\/pre>\n<p>A fun\u00e7\u00e3o acima recupera os \u00faltimos 20 posts do blog na categoria especificada (por padr\u00e3o o <code>'post_type'<\/code> \u00e9 <code>'post'<\/code>) e retorna um array de <code>$post<\/code> objects. Voc\u00ea pode iterar sobre a matriz para exibir as mensagens na tela. \u00c9 muito f\u00e1cil, certo?<\/p>\n<p><code>get_posts<\/code> <a href=\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\">usa <code>WP_Query<\/code><\/a> para recuperar itens do post, e mant\u00e9m um array dos mesmos par\u00e2metros dispon\u00edveis no <code>WP_Query<\/code> (com poucas exce\u00e7\u00f5es). Por isso temos uma enorme lista de vari\u00e1veis que podemos usar para construir as nossas consultas personalizadas. Estes par\u00e2metros est\u00e3o agrupados nas seguintes <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/#parameters\">15 categorias<\/a>:<\/p>\n<ul>\n<li>Author Parameters<\/li>\n<li>Category Parameters<\/li>\n<li>Tag Parameters<\/li>\n<li>Taxonomy Parameters<\/li>\n<li>Search Parameters<\/li>\n<li>Post &#038; Page Parameters<\/li>\n<li>Password Parameters<\/li>\n<li>Post Type Parameters<\/li>\n<li>Order &#038; Orderby Parameters<\/li>\n<li>Date Parameters<\/li>\n<li>Custom Field (post meta) Parameters<\/li>\n<li>Permission Parameters<\/li>\n<li>Mime Type Parameters<\/li>\n<li>Caching Parameters<\/li>\n<li>Return Fields Parameter<\/li>\n<\/ul>\n<p>Uma r\u00e1pida olhada na lista acima pode lhe dar uma id\u00e9ia da variedade de consultas personalizadas que voc\u00ea pode criar e executar no banco de dados do WordPress. Ent\u00e3o, vamos mergulhar mais fundo nos par\u00e2metros de consulta e come\u00e7ar a construir nossas listas de posts.<\/p>\n<h2 id=\"parameters\">Como Criar Consultas com o WordPress get_posts<\/h2>\n<p>Cada categoria de par\u00e2metros est\u00e1 relacionada com a mesma informa\u00e7\u00e3o. Por exemplo, podemos criar uma consulta para recuperar mensagens do(s) autor(es) especificado(s) ou excluindo o(s) autor(es) especificado(s), definindo o autor por ID ou nicename. Da mesma forma, podemos construir consultas para buscar posts por categoria, tag, taxonomia, data, campos personalizados e muito mais.<\/p>\n<h3>Como Usar Par\u00e2metros para Construir Consultas Simples<\/h3>\n<p>Muitos par\u00e2metros podem ser utilizados de forma bastante semelhante, independentemente da categoria a que pertencem. Por exemplo, os seguintes par\u00e2metros permitem consultar o banco de dados por autor(es) postado(s):<\/p>\n<ul>\n<li><code>author<\/code> (<em>int<\/em>) \u2013 ID do autor<\/li>\n<li><code>author_name<\/code> (<em>string<\/em>) \u2013\u00a0<code>user_nicename<\/code>\u00a0do autor<\/li>\n<li><code>author__in<\/code> (<em>array<\/em>) \u2013 um array de IDs de m\u00faltiplos autores<\/li>\n<li><code>author__not_in<\/code> (<em>array<\/em>) \u2013 um array de IDs de m\u00faltiplos autores a serem exclu\u00eddos do conjunto de resultados<\/li>\n<\/ul>\n<p>Como podemos usar estes par\u00e2metros?<\/p>\n<p>No seguinte exemplo, o par\u00e2metro <code>'autor'<\/code> especifica que queremos os posts mais recentes do blog escritos pelo autor com ID = 1:<\/p>\n<pre><code class=\"language-php\">$my_posts = get_posts( array( 'author' =&gt; 1 ) );<\/code><\/pre>\n<p>O mesmo par\u00e2metro<em> &#8216;autor&#8217;<\/em> permite consultar a base de dados de diferentes formas:<\/p>\n<pre><code class=\"language-php\">\/\/ return an array of posts from specific authors\n$my_posts = get_posts( array( 'author' =&gt; '1,5,12' ) );<\/code><\/pre>\n<pre><code class=\"language-php\">\/\/ return an array of posts excluding the specified author\n$my_posts = get_posts( array( 'author' =&gt; -1 ) );<\/code><\/pre>\n<p>Assim, dependendo do valor do par\u00e2metro, voc\u00ea ter\u00e1 um conjunto de resultados com posts de um \u00fanico autor (inteiro), de v\u00e1rios autores (uma lista de valores separados por v\u00edrgulas) ou excluindo um autor (valores negativos).<\/p>\n<p>Outros par\u00e2metros proporcionam flexibilidade adicional. Por exemplo, a seguinte chamada para <code>get_posts<\/code> retorna um array dos \u00faltimos posts do blog de v\u00e1rios autores:<\/p>\n<pre><code class=\"language-php\">\/\/ return an array of posts from multiple authors\n$my_posts = get_posts( array( 'author__in' =&gt; array( 1, 5, 12 ) ) );<\/code><\/pre>\n<p>E tamb\u00e9m podemos excluir v\u00e1rios autores:<\/p>\n<pre><code class=\"language-php\">\/\/ return an array of posts from multiple authors\n$my_posts = get_posts( array( 'author__not_in' =&gt; array( 1, 5, 12 ) ) );<\/code><\/pre>\n<p>Da mesma forma, podemos usar par\u00e2metros de categoria, par\u00e2metros de tag, par\u00e2metros de post type, com algumas diferen\u00e7as espec\u00edficas. Veja, como exemplo, os par\u00e2metros de categoria:<\/p>\n<ul>\n<li><code>cat<\/code> (<em>int<\/em>)<\/li>\n<li><code>category_name<\/code> (<em>string<\/em>)<\/li>\n<li><code>category__and<\/code> (<em>array<\/em>)<\/li>\n<li><code>category__in<\/code> (<em>array<\/em>)<\/li>\n<li><code>category__not_in<\/code> (<em>array<\/em>)<\/li>\n<\/ul>\n<p>De qualquer forma, nem todos os par\u00e2metros s\u00e3o t\u00e3o f\u00e1ceis de usar como estes par\u00e2metros. Al\u00e9m disso, podemos usar par\u00e2metros de categoria, params de tipo post, params de tipo mime, etc. tudo em uma \u00fanica consulta. Isso significa que temos controle granular sobre os itens no conjunto de resultados, e podemos construir consultas mais avan\u00e7adas com base em tipos de posts, taxonomias personalizadas e campos personalizados.<\/p>\n<p>Ent\u00e3o, vamos mergulhar mais fundo!<\/p>\n<h3>Como Criar Consultas Avan\u00e7adas no WordPress<\/h3>\n<p>Vamos dar um passo \u00e0 frente com uma consulta mais avan\u00e7ada baseada em tipos de posts personalizados e taxonomias personalizadas. Digamos que tem o seguinte tipo de mensagem:<\/p>\n<p><strong>nome<\/strong>: livro<br \/>\n<strong>nome da taxonomia<\/strong>: book_category, book_author<br \/>\n<strong>suporte para<\/strong>: t\u00edtulo, editor, miniaturas, excerto, campos personalizados<\/p>\n<h4>Tipos de Postos Personalizados e Taxonomias Personalizadas<\/h4>\n<p>Suponha que voc\u00ea queira uma lista dos livros mais recentes na taxonomia personalizada de <code>book_category<\/code> especificada. Aqui est\u00e1 a matriz de argumentos:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'post_type'\t\t=&gt; 'book',\n\t'tax_query'\t\t=&gt; array(\n\t\tarray(\n\t\t\t'taxonomy'\t=&gt; 'book_category',\n\t\t\t'field'\t\t=&gt; 'slug',\n\t\t\t'terms'\t\t=&gt; 'sci-fi'\n\t\t)\n\t),\n);<\/code><\/pre>\n<p>Os argumentos acima simplesmente dizem ao WordPress para recuperar todos os livros em <code>'sci-fi'<\/code> <code>'book_category'<\/code>.<\/p>\n<p>O par\u00e2metro <code>'tax_query'<\/code> pega um array de arrays de argumentos (ou seja, um array de arrays). Esses arrays aninhados permitem construir consultas muito complexas baseadas em m\u00faltiplas taxonomias, como mostrado no exemplo abaixo:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'numberposts'\t=&gt; 10,\n\t'post_type'\t\t=&gt; 'book',\n\t'relation'\t\t=&gt; 'AND',\n\t'tax_query'\t\t=&gt; array(\n\t\tarray(\n\t\t\t'taxonomy'\t=&gt; 'book_category',\n\t\t\t'field'\t\t=&gt; 'slug',\n\t\t\t'terms'\t\t=&gt; 'sci-fi'\n\t\t),\n\t\tarray(\n\t\t\t'taxonomy'\t=&gt; 'book_author',\n\t\t\t'field'\t\t=&gt; 'term_id',\n\t\t\t'terms'\t\t=&gt; 22\n\t\t)\n\t)\n);<\/code><\/pre>\n<p>Estes par\u00e2metros permitem-nos recuperar uma lista dos \u00faltimos 10 tipos de post <code>'book'<\/code> no\u00a0<code>'sci-fi'<\/code> <code>'book_category'<\/code>, escrito pelo <code>'book_author'<\/code> com o ID #22. O par\u00e2metro <code>'relation'<\/code> define a rela\u00e7\u00e3o l\u00f3gica entre cada taxonomia listada em <code>'tax_query'<\/code>. Acima definimos seu valor para <code>AND<\/code> porque precisamos recuperar todos os livros pertencentes \u00e0 categoria <code>'sci-fi'<\/code>\u00a0<code>AND<\/code> escritos pelo autor #22.<\/p>\n<h4>Como Construir Meta Consultas Usando Par\u00e2metros de Campo Personalizados<\/h4>\n<p>Ocasionalmente, voc\u00ea pode precisar criar listas de mensagens com base em uma chave de campo e\/ou valor personalizado espec\u00edfico.<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'meta_key'\t\t=&gt; 'cover',\n\t'meta_value'\t=&gt; 'paperback',\n\t'meta_compare'\t=&gt; '='\n);<\/code><\/pre>\n<p>Estes par\u00e2metros nos permitem recuperar todos os posts por chave de campo personalizada e valor. <code>'meta_compare'<\/code> define o operador necess\u00e1rio para testar o valor do par\u00e2metro <code>'meta_value'<\/code>. Aqui <code>'meta_value'<\/code> \u00e9 <code>'='<\/code>, que tamb\u00e9m \u00e9 o valor padr\u00e3o.<\/p>\n<p>Os valores dispon\u00edveis s\u00e3o <code>'='<\/code>, <code>'!='<\/code>, <code>'&gt;'<\/code>, <code>'&gt;='<\/code>, <code>'&lt;'<\/code>, <code>'&lt;='<\/code>, <code>'LIKE'<\/code>, <code>'NOT LIKE'<\/code>, <code>'IN'<\/code>, <code>'NOT IN'<\/code>, <code>'BETWEEN'<\/code>, <code>'NOT BETWEEN'<\/code>, <code>'NOT EXISTS'<\/code>, <code>'REGEXP'<\/code>, <code>'NOT REGEXP'<\/code> ou\u00a0<code>'RLIKE'<\/code>.<\/p>\n<p>Este \u00e9 um exemplo muito f\u00e1cil, mas podemos construir consultas mais avan\u00e7adas. No exemplo seguinte, consultamos a base de dados de livros de fantasia publicados ap\u00f3s 2010:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'post_type'\t\t=&gt; 'book',\n\t'meta_key'\t\t=&gt; 'year_published',\n\t'meta_value_num'\t=&gt; 2010,\n\t'meta_compare'\t=&gt; '&gt;',\n\t'tax_query'\t\t=&gt; array(\n\t\tarray(\n\t\t\t'taxonomy'\t=&gt; 'book_category',\n\t\t\t'field'\t\t=&gt; 'slug'\n\t\t\t'terms'\t\t=&gt; 'fantasy'\n\t\t)\n\t)\n);<\/code><\/pre>\n<p>E podemos ir ainda mais longe. No pr\u00f3ximo exemplo estamos misturando um tipo de postagem com uma taxonomia personalizada e dois campos personalizados:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'post_type'\t\t=&gt; 'book',\n\t'tax_query'\t\t=&gt; array(\n\t\tarray(\n\t\t\t'taxonomy'\t=&gt; 'book_category',\n\t\t\t'field'\t\t=&gt; 'slug'\n\t\t\t'terms'\t\t=&gt; array( 'fantasy' )\n\t\t)\n\t),\n\t'meta_query'\t=&gt; array(\n\t\t'relation'\t\t=&gt; 'AND',\n\t\tarray(\n\t\t\t'key'\t\t=&gt; 'year_published',\n\t\t\t'value'\t\t=&gt; 2010,\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; '&gt;',\n\t\t),\n\t\tarray(\n\t\t\t'key'\t\t=&gt; 'price',\n\t\t\t'value'\t\t=&gt; array( 10, 25 ),\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; 'BETWEEN',\n\t\t)\n\t)\n);<\/code><\/pre>\n<p>Aqui n\u00f3s definimos um array de par\u00e2metros para recuperar uma lista de livros de fantasia publicados ap\u00f3s 2010 que custam <code>BETWEEN<\/code> $10 e $25.<\/p>\n<p>Voc\u00ea pode ver que o par\u00e2metro <code>'meta_query'<\/code> funciona muito como o par\u00e2metro <code>'tax_query'<\/code>. Ele mant\u00e9m uma matriz de arrays, permitindo-nos comprar consultas avan\u00e7adas baseadas em m\u00faltiplos pares de meta-chave\/valor. Para obter uma lista abrangente de par\u00e2metros de consulta e um bom n\u00famero de exemplos, consultar a <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\">documenta\u00e7\u00e3o <code>WP_Query<\/code><\/a>.<\/p>\n<h3>Por que get_posts est\u00e1 Limitado a 5 Posts WordPress?<\/h3>\n<p>A fun\u00e7\u00e3o <code>get_posts<\/code> em os mesmos argumentos que <code>WP_Query::parse_query()<\/code> (<a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/WP_Query\/parse_query\/\">veja o Codex<\/a>), mas alguns par\u00e2metros espec\u00edficos fazem com que ele funcione um pouco diferente de um objeto<code> WP_Query<\/code>.<\/p>\n<p>Talvez voc\u00ea n\u00e3o tenha usado o par\u00e2metro <code>'numberposts'<\/code> em suas consultas e voc\u00ea est\u00e1 querendo saber por que voc\u00ea v\u00ea apenas 5 itens em sua lista.<\/p>\n<p>Por padr\u00e3o, o n\u00famero de lan\u00e7amentos definidos em <strong>Configura\u00e7\u00f5es \u2192 P\u00e1gina<\/strong> de administra\u00e7\u00e3o de <strong>leitura<\/strong> determina o n\u00famero de lan\u00e7amentos a serem recuperados por uma consulta do WordPress. De qualquer forma, se voc\u00ea n\u00e3o especificar um valor personalizado para <code>'numberposts'<\/code> ou <code>'posts_per_page'<\/code>, <code>get_posts<\/code> retorna um n\u00famero diferente de posts.<\/p>\n<ul>\n<li><code>'numberposts'<\/code> \u00e9 o n\u00famero total de mensagens a recuperar. \u00c9 um alias de <code>'posts_per_page'<\/code> em <code>WP_Query<\/code>, mas h\u00e1 uma diferen\u00e7a entre os dois: por padr\u00e3o, <strong>o n\u00famero de posts a recuperar ao usar <\/strong><code><strong>get_posts<\/strong><\/code><strong> \u00e9 5<\/strong>, enquanto <code>'posts_per_page'<\/code> em <code>WP_Query<\/code> padr\u00e3o para o n\u00famero de posts por p\u00e1gina de seu blog WordPress. Voc\u00ea pode substituir o valor padr\u00e3o definindo um valor personalizado para <code>'numberposts'<\/code> ou <code>'posts_per_page'<\/code> no array de argumentos.<\/li>\n<\/ul>\n<p>Al\u00e9m de<code> 'numberposts'<\/code>, os seguintes par\u00e2metros s\u00e3o espec\u00edficos de <code>get_posts<\/code>:<\/p>\n<ul>\n<li><code>'category'<\/code>\u00a0\u00e9 uma lista separada por v\u00edrgulas de IDs de categoria. \u00c9 um alias do par\u00e2metro <code>'cat'<\/code> em <code>WP_Query<\/code>.<\/li>\n<li>O <code>'include'<\/code> \u00e9 uma lista de IDs postais separados por v\u00edrgulas. Este \u00e9 um alias do par\u00e2metro <code>'post__in'<\/code> em <code>WP_Query<\/code>.<\/li>\n<li><code>'exclude'<\/code> \u00e9 uma lista separada por v\u00edrgulas de IDs postais.<\/li>\n<li><code>'suppress_filters'<\/code> especifica se os filtros devem ser suprimidos. Esse par\u00e2metro padr\u00e3o \u00e9 <code>true<\/code> em <code>get_posts<\/code>, enquanto que o padr\u00e3o \u00e9 <code>false<\/code> em <code>WP_Query<\/code> (<a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.2\/src\/wp-includes\/class-wp-query.php#L709\">veja em Track<\/a>).<\/li>\n<\/ul>\n<p>A fun\u00e7\u00e3o <code>get_posts<\/code> \u00e9 definida em <code>wp-includes\/post.php<\/code>. Voc\u00ea pode mergulhar profundamente em como <code>get_posts<\/code> funciona verificando o c\u00f3digo fonte <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.2\/src\/wp-includes\/post.php#L1901\">no Track (WordPress 5.2)<\/a> ou em sua instala\u00e7\u00e3o WordPress local.<\/p>\n<h3>Encomenda de Itens<\/h3>\n<p><code>'orderby'<\/code> e <code>'order'<\/code> ordenar os itens no conjunto de resultados. Voc\u00ea classifica os posts por <code>'ID'<\/code>, <code>'author'<\/code>, <code>'title'<\/code>, <code>'name'<\/code>, <code>'type'<\/code>, <code>'date'<\/code>, <code>'modified'<\/code>, <code>'parent'<\/code>, <code>'rand'<\/code>, <code>'comment_count'<\/code> e de muitas outras maneiras, em ordem ascendente ou descendente.<\/p>\n<p>Se voc\u00ea tem uma consulta simples, voc\u00ea s\u00f3 precisa definir um valor para <code>'order'<\/code> e <code>'orderby'<\/code>. No exemplo a seguir, os posts s\u00e3o ordenados pelo nome do post em ordem crescente:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'author'\t=&gt; '1,5,12',\n\t'orderby'\t=&gt; 'name',\n\t'order'\t\t=&gt; 'ASC'\n);<\/code><\/pre>\n<p>Isso \u00e9 muito simples. Mas e se tivesses uma consulta avan\u00e7ada? Ou seja: Podemos classificar itens por um ou mais valores de campo personalizados em uma meta consulta avan\u00e7ada?<\/p>\n<p>O WordPress 4.0 e o <a href=\"https:\/\/make.wordpress.org\/core\/2015\/03\/30\/query-improvements-in-wp-4-2-orderby-and-meta_query\/\">WordPress 4.2 trouxeram melhorias importantes<\/a> aos par\u00e2metros <code>'orderby'<\/code> e <code>'meta_query'<\/code>. Agora temos uma nova sintaxe para ordena\u00e7\u00e3o por cl\u00e1usulas espec\u00edficas de uma meta query. Gra\u00e7as \u00e0 nova sintaxe, podemos usar \u00edndices para criar refer\u00eancias \u00e0s cl\u00e1usulas espec\u00edficas da meta query a partir do par\u00e2metro <code>'orderby'<\/code>.<\/p>\n<p>Gra\u00e7as a estas melhorias, a meta query no exemplo acima pode ser escrita da seguinte forma:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'meta_query'\t=&gt; array(\n\t\t'relation'\t\t=&gt; 'AND',\n\t\t'year_clause' =&gt; array(\n\t\t\t'key'\t\t=&gt; 'year_published',\n\t\t\t'value'\t\t=&gt; 2010,\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; '&gt;',\n\t\t),\n\t\t'price_clause' =&gt; array(\n\t\t\t'key'\t\t=&gt; 'price',\n\t\t\t'value'\t\t=&gt; array( 10, 25 ),\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; 'BETWEEN',\n\t\t)\n\t),\n\t'orderby' =&gt; 'price_clause',\n);<\/code><\/pre>\n<p>No exemplo acima, ordenamos os elementos por <code>'price_clause'<\/code>.<\/p>\n<p>E podemos fazer ainda mais. <a href=\"https:\/\/make.wordpress.org\/core\/2014\/08\/29\/a-more-powerful-order-by-in-wordpress-4-0\/\">A partir do WordPress 4.0<\/a>, podemos passar para <code>get_posts<\/code> um array de \u00edndices de meta query ao inv\u00e9s de um \u00fanico \u00edndice, como visto no exemplo abaixo:<\/p>\n<pre><code class=\"language-php\">$args = array(\n\t'meta_query'\t=&gt; array(\n\t\t'relation'\t\t=&gt; 'AND',\n\t\t'year_clause' =&gt; array(\n\t\t\t'key'\t\t=&gt; 'year_published',\n\t\t\t'value'\t\t=&gt; 2010,\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; '&gt;',\n\t\t),\n\t\t'price_clause' =&gt; array(\n\t\t\t'key'\t\t=&gt; 'price',\n\t\t\t'value'\t\t=&gt; array( 10, 25 ),\n\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t'compare'\t=&gt; 'BETWEEN',\n\t\t)\n\t),\n\t'orderby' =&gt; array( 'price_clause' =&gt; 'ASC', 'year_clause' =&gt; 'DESC' ),\n);<\/code><\/pre>\n<p>Parab\u00e9ns, voc\u00ea construiu uma meta query avan\u00e7ada e ordenou os resultados primeiro por <code>'price_clause'<\/code> em ordem ascendente, depois por <code>'year_clause'<\/code> em ordem descendente.<\/p>\n<p>Veja <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/#order-orderby-parameters\">a lista completa de op\u00e7\u00f5es de classifica\u00e7\u00e3o<\/a> no Codex.<\/p>\n<p>Est\u00e1 na hora de mostrarmos os dados na primeira p\u00e1gina.<\/p>\n<p>Sugest\u00e3o de leitura: <a href=\"https:\/\/kinsta.com\/pt\/blog\/phpinfo\/\">Como Criar e Usar Facilmente uma P\u00e1gina phpinfo<\/a>.<\/p>\n<h2 id=\"display\">Como Exibir get_posts Retorno de Dados<\/h2>\n<p>WordPress <code>get_posts<\/code>\u00a0retorna um array de <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_post\/\">objetos <code>WP_Post<\/code><\/a> dando-nos acesso a um n\u00famero de vari\u00e1veis para cada post selecionado armazenado na tabela de banco de dados <code>wp_posts<\/code>:<\/p>\n<ul>\n<li>ID<\/li>\n<li>post_author<\/li>\n<li>post_name<\/li>\n<li>post_type<\/li>\n<li>post_title<\/li>\n<li>post_date<\/li>\n<li>post_date_gmt<\/li>\n<li>post_content<\/li>\n<li>post_excerpt<\/li>\n<li>post_status<\/li>\n<li>comment_status<\/li>\n<li>ping_status<\/li>\n<li>post_password<\/li>\n<li>post_parent<\/li>\n<li>post_modified<\/li>\n<li>post_modified_gmt<\/li>\n<li>comment_count<\/li>\n<li>menu_order<\/li>\n<\/ul>\n<figure id=\"attachment_54556\" aria-describedby=\"caption-attachment-54556\" style=\"width: 2176px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-54556 size-full\" src=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/08\/estrutura-tabela-wp-posts-phpmyadmin.png\" alt=\"Estrutura da tabela wp_posts no phpMyAdmin\" width=\"2176\" height=\"1542\"><figcaption id=\"caption-attachment-54556\" class=\"wp-caption-text\">Estrutura da tabela wp_posts no phpMyAdmin<\/figcaption><\/figure>\n<p>Voc\u00ea pode acessar facilmente esses dados com um ciclo <code>foreach<\/code> como o seguinte:<\/p>\n<pre><code class=\"language-php\">$custom_posts = get_posts( $args );\n\nif( ! empty( $custom_posts ) ){\n\t$output = '&lt;ul&gt;';\n\tforeach ( $custom_posts as $p ){\n\n\t\t$output .= '&lt;li&gt;&lt;a href=\"' \n\t\t. get_permalink( $p-&gt;ID ) . '\"&gt;' \n\t\t. $p-&gt;post_title . '&lt;\/a&gt;&lt;\/li&gt;';\n\t}\n\n\t$output .= '&lt;\/ul&gt;';\n}\n\nreturn $output ?? '&lt;strong&gt;Sorry. No posts matching your criteria!&lt;\/strong&gt;';<\/code><\/pre>\n<p>Se <code>get_posts<\/code> encontrar pelo menos um post, ele retorna um array de itens que podemos atravessar para mostrar o t\u00edtulo do post e um link para o post original. Usamos a <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_permalink\/\">fun\u00e7\u00e3o <code>get_permalink<\/code><\/a> para recuperar o post permalink, pois n\u00e3o temos uma vari\u00e1vel <code>WP_Post<\/code> correspondente.<\/p>\n<p>Isso \u00e9 muito f\u00e1cil, mas como podemos implementar esse c\u00f3digo e construir nossas listas personalizadas de posts usando o WordPress <code>get_posts<\/code>?<\/p>\n<p>Voc\u00ea pode mostrar listas de posts em suas p\u00e1ginas de v\u00e1rias maneiras.<\/p>\n<ul>\n<li>Voc\u00ea pode inclu\u00ed-los em qualquer lugar da p\u00e1gina editando o <a href=\"https:\/\/kinsta.com\/pt\/blog\/tema-filho-no-wordpress\/\">modelo de p\u00e1gina de um tema infantil<\/a>.<\/li>\n<li>Voc\u00ea pode inclu\u00ed-los em um <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-widgets\/\">widget de barra lateral<\/a>.<\/li>\n<li>Voc\u00ea pode inclu\u00ed-los no conte\u00fado de uma publica\u00e7\u00e3o <a href=\"https:\/\/kinsta.com\/pt\/blog\/codigo-curto-wordpress\/\">com um atalho personalizado<\/a><\/li>\n<\/ul>\n<h2 id=\"example\">Exemplo do Mundo Real: Como Exibir uma Lista Personalizada de Itens com um C\u00f3digo de Acesso<\/h2>\n<p>Vou mostrar-lhe como criar um atalho r\u00e1pido e f\u00e1cil que pode incluir no seu conte\u00fado. De qualquer forma, eu n\u00e3o vou mergulhar fundo em atalhos, como j\u00e1 abordamos esse t\u00f3pico em <a href=\"https:\/\/kinsta.com\/pt\/blog\/codigo-curto-wordpress\/\">um post anterior do blog<\/a>.<\/p>\n<p>Primeiro, crie um novo diret\u00f3rio na pasta <code>wp-content\/plugins<\/code> da sua <a href=\"https:\/\/kinsta.com\/pt\/blog\/instalar-wordpress-localmente\/\">instala\u00e7\u00e3o local do WordPress<\/a> ou em um <a href=\"https:\/\/kinsta.com\/pt\/docs\/hospedagem-de-wordpress\/ambiente-de-teste\/\">ambiente de testes<\/a>. Neste exemplo, eu nomeei o diret\u00f3rio <strong>kinsta-shortcodes<\/strong>.<\/p>\n<p>Em <code>wp-content\/plugins\/<strong>kinsta-shortcodes<\/strong>\/crie<\/code> um arquivo .php com o mesmo nome do novo diret\u00f3rio: <code>kinsta-shortcodes.php<\/code>.<\/p>\n<p>Abra o novo ficheiro no seu <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhores-editores-texto\/\">editor de texto favorito<\/a> e inclua o seguinte cabe\u00e7alho:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * @package Kinsta_shortcodes\n * @version 1.0\n *\/\n\/*\nPlugin Name: Kinsta shortcodes\nPlugin URI: http:\/\/wordpress.org\/extend\/plugins\/#\nDescription: This is an example plugin \nAuthor: Your Name\nVersion: 1.0\nAuthor URI: https:\/\/yourwebsite.com\/\n*\/<\/code><\/pre>\n<p>Agora temos um plugin novinho em folha, mas continua a n\u00e3o fazer nada. Navegue at\u00e9 a tela de administra\u00e7\u00e3o de <strong>plugins<\/strong> no seu <a href=\"https:\/\/kinsta.com\/pt\/blog\/painel-administrativo-wordpress\/\">painel do WordPress<\/a> e ative o novo plugin, certificando-se de que voc\u00ea tem o <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-debug\/#how-to-manually-enable-wordpress-debug-mode\"><code>WP_DEBUG<\/code> definido como <\/a><code>true<\/code> no seu arquivo <code>wp-config.php<\/code>.<\/p>\n<p>A tua caixa de areia est\u00e1 agora pronta para os teus hacks. O pr\u00f3ximo passo \u00e9 registrar um gancho para um atalho personalizado:<\/p>\n<pre><code class=\"language-php\">\/**\n * Add a hook for a shortcode tag\n *\/\nfunction kinsta_shortcodes_init(){\n\tadd_shortcode( 'kinsta_get_posts', 'kinsta_get_posts_cb' );\n}\nadd_action('init', 'kinsta_shortcodes_init');<\/code><\/pre>\n<p><code>kinsta_get_posts<\/code> \u00e9 o nome do shortcode e <code>kinsta_get_posts_cb<\/code> \u00e9 o retorno de chamada definido abaixo:<\/p>\n<pre><code class=\"language-php\">\/**\n * Register a shortcode\n *\n * @param array $atts Array of shortcode attributes\n *\/\nfunction kinsta_get_posts_cb( $atts ){\n\n\t\/\/ safely extract custom arguments and set default values\n\textract( shortcode_atts(\n\t\t\tarray(\n\t\t\t\t'numberposts'\t\t=&gt; 3,\n\t\t\t\t'post_type'\t\t\t=&gt; 'post',\n\t\t\t\t'book_category'\t\t=&gt; 'fantasy',\n\t\t\t\t'year_published'\t=&gt; 1900,\n\t\t\t\t'price_min'\t\t\t=&gt; 0,\n\t\t\t\t'price_max'\t\t\t=&gt; 50\n\t\t\t),\n\t\t\t$atts,\n\t\t\t'kinsta_get_posts'\n\t\t) );\n\n\t\/\/ define the array of query arguments\n\t$args = array(\n\t\t'numberposts'\t=&gt; $numberposts,\n\t\t'post_type'\t\t=&gt; $post_type,\n\t\t'tax_query'\t\t=&gt; array(\n\t\t\tarray(\n\t\t\t\t'taxonomy'\t=&gt; 'book_category',\n\t\t\t\t'field'\t\t=&gt; 'slug',\n\t\t\t\t'terms'\t\t=&gt; $book_category,\n\t\t\t)\n\t\t),\n\t\t'meta_query'\t=&gt; array(\n\t\t\t'relation'\t\t=&gt; 'AND',\n\t\t\t'year_clause'\t=&gt; array(\n\t\t\t\t'key'\t\t=&gt; 'year_published',\n\t\t\t\t'value'\t\t=&gt; $year_published,\n\t\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t\t'compare'\t=&gt; '&gt;',\n\t\t\t),\n\t\t\t'price_clause'\t=&gt; array(\n\t\t\t\t'key'\t\t=&gt; 'price',\n\t\t\t\t'value'\t\t=&gt; array( $price_min, $price_max ),\n\t\t\t\t'type'\t\t=&gt; 'numeric',\n\t\t\t\t'compare'\t=&gt; 'BETWEEN',\n\t\t\t)\n\t\t),\n\t\t'orderby' =&gt; array( 'price_clause' =&gt; 'ASC' )\n\t);\n\n\t$custom_posts = get_posts( $args );\n\n\tif( ! empty( $custom_posts ) ){\n\t\t$output = '&lt;ul&gt;';\n\t\tforeach ( $custom_posts as $p ){\n\n\t\t\t$output .= '&lt;li&gt;&lt;a href=\"' \n\t\t\t. get_permalink( $p-&gt;ID ) . '\"&gt;' \n\t\t\t. $p-&gt;post_title . '&lt;\/a&gt; (' \n\t\t\t. get_post_meta( $p-&gt;ID, 'year_published', true ) \n\t\t\t. ') - Price: ' . get_post_meta( $p-&gt;ID, 'price', true ) . '&lt;\/li&gt;';\n\t\t}\n\n\t\t$output .= '&lt;\/ul&gt;';\n\t}\n\nreturn $output ?? '&lt;strong&gt;Sorry. No posts matching your criteria!&lt;\/strong&gt;';<\/code><\/pre>\n<p>Definimos seis atributos de atalho que usamos para definir um array de par\u00e2metros, que \u00e9 finalmente passado para a fun\u00e7\u00e3o WordPress <code>get_posts<\/code>. Se <code>$custom_posts<\/code> n\u00e3o estiver vazio, ent\u00e3o um ciclo <code>foreach<\/code> gera o HTML de uma lista desordenada de itens.<\/p>\n<p>Agora voc\u00ea e os autores do seu blog podem incluir listas de posts usando um shortcode como o seguinte:<\/p>\n<pre>[kinsta_get_posts post_type=\"book\" book_category=\"sci-fi\" numberposts=\"4\" price_min=1 price_max=250]<\/pre>\n<p>Naturalmente, voc\u00ea pode mudar a matriz de argumentos como voc\u00ea gosta e executar seus testes em qualquer post ou p\u00e1gina do seu site de teste.<\/p>\n<figure id=\"attachment_54811\" aria-describedby=\"caption-attachment-54811\" style=\"width: 1532px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-54811 size-full\" src=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/avancada-posts-construidos-funcao-get-posts.png\" alt=\"Uma lista avan\u00e7ada de posts constru\u00eddos com a fun\u00e7\u00e3o get_posts\" width=\"1532\" height=\"1066\"><figcaption id=\"caption-attachment-54811\" class=\"wp-caption-text\">Uma lista avan\u00e7ada de posts constru\u00eddos com a fun\u00e7\u00e3o get_posts<\/figcaption><\/figure>\n\n<h2>Resumo<\/h2>\n<p>O WordPress<strong> get_posts<\/strong> \u00e9 uma fun\u00e7\u00e3o poderosa que permite que os desenvolvedores incluam listas de posts em qualquer lugar no frontend do seu site do WordPress. Ele usa <code>WP_Query<\/code>, mas \u00e9 mais f\u00e1cil de usar e \u00e9 prefer\u00edvel a <code>WP_Query<\/code> quando voc\u00ea s\u00f3 precisa de listas de posts. De qualquer forma, uma refer\u00eancia direta a <code>WP_Query<\/code> \u00e9 recomendada quando voc\u00ea precisa exibir posts em um <a href=\"https:\/\/codex.wordpress.org\/The_Loop\">Loop<\/a>.<\/p>\n<p>Ent\u00e3o, construa suas listas, teste seu c\u00f3digo, e quando tiver certeza de que ele funciona bem, ent\u00e3o (e s\u00f3 ent\u00e3o) empurre-o para o seu website ao vivo (mas <a href=\"https:\/\/kinsta.com\/pt\/blog\/plugins-wordpress-backup\/\">execute um backup primeiro<\/a>).<\/p>\n<p>Agora gostar\u00edamos de ter not\u00edcias suas. Qual \u00e9 a sua experi\u00eancia com o WordPress <code>get_posts<\/code> function? Voc\u00ea tem algum caso de uso para compartilhar conosco? Fa\u00e7a isso nos coment\u00e1rios abaixo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O WordPress get_posts \u00e9 uma fun\u00e7\u00e3o poderosa que permite aos desenvolvedores recuperar partes do conte\u00fado do banco de dados do WordPress. Voc\u00ea pode especificar com o &#8230;<\/p>\n","protected":false},"author":36,"featured_media":30140,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[44,208],"topic":[985,997],"class_list":["post-30133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wp_query","topic-aprenda-php","topic-funcoes-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens<\/title>\n<meta name=\"description\" content=\"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens\" \/>\n<meta property=\"og:description\" content=\"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-18T13:16:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T07:45:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens\",\"datePublished\":\"2019-10-18T13:16:16+00:00\",\"dateModified\":\"2023-08-22T07:45:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\"},\"wordCount\":2613,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\",\"keywords\":[\"webdev\",\"WP_Query\"],\"articleSection\":[\"Desenvolvimento WordPress\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\",\"name\":\"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\",\"datePublished\":\"2019-10-18T13:16:16+00:00\",\"dateModified\":\"2023-08-22T07:45:49+00:00\",\"description\":\"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png\",\"width\":1460,\"height\":730,\"caption\":\"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o PHP para Construir Listas de Postagens\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Aprenda PHP\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/aprenda-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens","description":"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!","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:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/","og_locale":"pt_PT","og_type":"article","og_title":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens","og_description":"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!","og_url":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2019-10-18T13:16:16+00:00","article_modified_time":"2023-08-22T07:45:49+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","type":"image\/png"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","twitter_creator":"@carlodaniele","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Carlo Daniele","Tempo estimado de leitura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens","datePublished":"2019-10-18T13:16:16+00:00","dateModified":"2023-08-22T07:45:49+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/"},"wordCount":2613,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","keywords":["webdev","WP_Query"],"articleSection":["Desenvolvimento WordPress"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/","url":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/","name":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","datePublished":"2019-10-18T13:16:16+00:00","dateModified":"2023-08-22T07:45:49+00:00","description":"Precisa criar listas de posts, p\u00e1ginas ou tipos de posts personalizados? Saiba como faz\u00ea-lo com a fun\u00e7\u00e3o get_posts do WordPress neste tutorial estendido!","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2019\/10\/wordpress-get_posts.png","width":1460,"height":730,"caption":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o PHP para Construir Listas de Postagens"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-get_posts\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Aprenda PHP","item":"https:\/\/kinsta.com\/pt\/topicos\/aprenda-php\/"},{"@type":"ListItem","position":3,"name":"WordPress get_posts: Como Usar Essa \u00datil Fun\u00e7\u00e3o de PHP para Construir Listas de Postagens"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/30133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=30133"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/30133\/revisions"}],"predecessor-version":[{"id":48733,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/30133\/revisions\/48733"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/pt"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/es"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/fr"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/nl"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/it"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/de"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/se"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/translations\/jp"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/30133\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/30140"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=30133"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=30133"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=30133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}