{"id":27648,"date":"2021-05-20T12:42:00","date_gmt":"2021-05-20T09:42:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27648"},"modified":"2021-10-18T04:10:50","modified_gmt":"2021-10-18T01:10:50","slug":"como-carregar-posts-wordpress-com-ajax","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-carregar-posts-wordpress-com-ajax\/","title":{"rendered":"Como carregar posts WordPress com AJAX"},"content":{"rendered":"<p>Estou executando um <a href=\"https:\/\/www.youtube.com\/channel\/UCosi8Kv8-EPLt5TBJLlsWJA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">canal no YouTube<\/a> onde posto v\u00eddeos relacionados a programa\u00e7\u00e3o e software. Recentemente, um dos assinantes me perguntou como carregar uma postagem do WordPress com AJAX. Em resposta a ele, decidi escrever um post sobre sua pergunta. Portanto, neste artigo, estudamos como carregar uma postagem do WordPress com AJAX usando um bot\u00e3o carregar mais e rolar a p\u00e1gina.<\/p>\n<p>A diferen\u00e7a entre carregar mais e uma rolagem de p\u00e1gina \u00e9 bastante simples. Ao usar o bot\u00e3o carregar mais, voc\u00ea precisa clicar em um bot\u00e3o para ver o pr\u00f3ximo conjunto de postagens. E na rolagem de p\u00e1gina, quando voc\u00ea rola para o final de uma janela de visualiza\u00e7\u00e3o, o pr\u00f3ximo conjunto de postagens deve ser carregado automaticamente.<\/p>\n<p>Vamos supor que voc\u00ea tenha algumas postagens e precise exibir 2 postagens no carregamento da p\u00e1gina e, em seguida, clicando em &#8216;Carregar mais&#8217; ou em &#8216;Rolagem da p\u00e1gina&#8217;, as pr\u00f3ximas 2 postagens devem ser exibidas. Este processo continuar\u00e1 at\u00e9 que todas as suas postagens sejam exibidas.<\/p>\n<p>Crie uma nova p\u00e1gina chamada &#8216;Blog&#8217;. Para exibir suas postagens na p\u00e1gina Blog, crie um modelo personalizado <code>page-blog.php<\/code>no diret\u00f3rio de seu tema ativo.<\/p>\n<p>Agora, quando os usu\u00e1rios visitam a p\u00e1gina do seu blog, eles devem ver 2 postagens. Portanto, adicione o c\u00f3digo abaixo em seu arquivo de modelo personalizado.<\/p>\n<pre><code>&lt;div class=\"entry-content\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;?php\n\u00a0\u00a0\u00a0\u00a0$args = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_type' =&gt; 'post',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'posts_per_page' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'paged' =&gt; 1,\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0$blog_posts = new WP_Query( $args );\n\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;?php if ($blog_posts-&gt;have_posts() ): ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"blog-posts\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php while ($blog_posts-&gt;have_posts() ): $blog_posts-&gt;the_post(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php the_excerpt(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php endwhile; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"loadmore\"&gt;Load More...&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;?php endif; ?&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Aqui, usei a chave &#8216;paginada&#8217; e passei o valor &#8216;1&#8217; para ela. &#8216;paginado&#8217; \u00e9 uma chave usada no WordPress quando se trata de pagina\u00e7\u00e3o. &#8216;paged&#8217; =&gt; 1 significa a primeira p\u00e1gina.<\/p>\n<p>Voc\u00ea notaria o elemento div com a classe &#8216;loadmore&#8217;. Ao clicar em Carregar mais, faremos uma chamada Ajax e obteremos o pr\u00f3ximo conjunto de postagens.<\/p>\n<h3>Carregar Postagens WordPress com Ajax no Bot\u00e3o Carregar Mais<\/h3>\n<p>Para fazer uma chamada Ajax, voc\u00ea precisa incluir o arquivo JS no ambiente WordPress. Crie um <code>custom.js<\/code>arquivo dentro do <code>js<\/code>diret\u00f3rio e, em seguida, adicione o c\u00f3digo abaixo no <code>functions.php<\/code>arquivo.<\/p>\n<pre><code>function blog_scripts() {\n\u00a0\u00a0\u00a0\u00a0\/\/ Register the script\n\u00a0\u00a0\u00a0\u00a0wp_register_script( 'custom-script', get_stylesheet_directory_uri(). '\/js\/custom.js', array('jquery'), false, true );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Localize the script with new data\n\u00a0\u00a0\u00a0\u00a0$script_data_array = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ajaxurl' =&gt; admin_url( 'admin-ajax.php' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security' =&gt; wp_create_nonce( 'load_more_posts' ),\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0wp_localize_script( 'custom-script', 'blog', $script_data_array );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Enqueued script with localized data.\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_script( 'custom-script' );\n}\nadd_action( 'wp_enqueue_scripts', 'blog_scripts' );<\/code><\/pre>\n<p>A seguir, vamos escrever um pouco de jQuery e dar uma chamada Ajax que em troca dar\u00e1 os pr\u00f3ximos posts.<\/p>\n<p><strong>custom.js<\/strong><\/p>\n<pre><code>var page = 2;\njQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0$('body').on('click', '.loadmore', function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action': 'load_posts_by_ajax',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'page': page,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security': blog.security\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(blog.ajaxurl, data, function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($.trim(response) != '') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.blog-posts').append(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0page++;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.loadmore').hide();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\n});<\/code><\/pre>\n<p>O que estamos fazendo aqui \u00e9 pegar uma &#8216;p\u00e1gina&#8217; de vari\u00e1vel javascript com valor inicial 2, pois vamos come\u00e7ar com a pagina\u00e7\u00e3o de segunda p\u00e1gina. Estou incrementando esta vari\u00e1vel &#8216;p\u00e1gina&#8217; ap\u00f3s receber a resposta do Ajax. Depois de obter a resposta, vou anex\u00e1-la \u00e0 lista de postagens existentes.<\/p>\n<p>Eu tamb\u00e9m usei o par\u00e2metro de a\u00e7\u00e3o como &#8216;load_posts_by_ajax&#8217; para uma chamada Ajax que precisa ser mapeada com a\u00e7\u00f5es do WordPress. Abra seu <code>functions.php<\/code>arquivo e adicione o c\u00f3digo abaixo a um arquivo.<\/p>\n<pre><code>add_action('wp_ajax_load_posts_by_ajax', 'load_posts_by_ajax_callback');\nadd_action('wp_ajax_nopriv_load_posts_by_ajax', 'load_posts_by_ajax_callback');<\/code><\/pre>\n<p>Nas a\u00e7\u00f5es do WordPress acima, chamamos a fun\u00e7\u00e3o de retorno de chamada <code>load_posts_by_ajax_callback<\/code>que irei definir na pr\u00f3xima etapa. Voc\u00ea pode definir esta fun\u00e7\u00e3o em seu <code>functions.php<\/code>.<\/p>\n<pre><code>function load_posts_by_ajax_callback() {\n\u00a0\u00a0\u00a0\u00a0check_ajax_referer('load_more_posts', 'security');\n\u00a0\u00a0\u00a0\u00a0$paged = $_POST['page'];\n\u00a0\u00a0\u00a0\u00a0$args = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_type' =&gt; 'post',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'posts_per_page' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'paged' =&gt; $paged,\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0$blog_posts = new WP_Query( $args );\n\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;?php if ($blog_posts-&gt;have_posts() ): ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php while ($blog_posts-&gt;have_posts() ): $blog_posts-&gt;the_post(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php the_excerpt(); ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php endwhile; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php\n\u00a0\u00a0\u00a0\u00a0endif;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0wp_die();\n}<\/code><\/pre>\n<p>Agora, quando voc\u00ea clicar no bot\u00e3o &#8216;Carregar mais&#8217;, ele carregar\u00e1 as pr\u00f3ximas postagens por meio do Ajax e retornar\u00e1 em resposta. O c\u00f3digo JavaScript escrito acima trataria do restante.<\/p>\n<h3>Carregar Postagens WordPress com Ajax na Rolagem da P\u00e1gina<\/h3>\n<p>Alguns usu\u00e1rios podem n\u00e3o querer um bot\u00e3o carregar mais para exibir as postagens com Ajax. Em vez disso, eles preferem que as postagens sejam exibidas assim que o usu\u00e1rio atingir o final de uma janela de visualiza\u00e7\u00e3o.<\/p>\n<p>Para conseguir isso, voc\u00ea precisa escrever uma l\u00f3gica que capture o evento no final de uma janela de visualiza\u00e7\u00e3o, o resto do c\u00f3digo \u00e9 o mesmo que o bot\u00e3o &#8216;Carregar mais&#8217;. Abaixo est\u00e1 o c\u00f3digo jQuery para rolagem de p\u00e1gina.<\/p>\n<pre><code>jQuery(window).scroll(function($) {\n\u00a0\u00a0\u00a0\u00a0if (jQuery(window).scrollTop() + jQuery(window).height() &gt; jQuery(document).height()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action': 'load_posts_by_ajax',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'page': page,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security': blog.security\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(blog.ajaxurl, data, function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($.trim(response) != '') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.blog-posts').append(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0page++;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('.loadmore').hide();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0}\n});<\/code><\/pre>\n<p>\u00c9 isso! Voc\u00ea pode ir em frente e experimentar. Gostaria de saber sua opini\u00e3o e sugest\u00f5es nos coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-integrar-o-upload-de-arquivos-ajax-no-wordpress\/\" title=\"Como integrar o upload de arquivos Ajax no WordPress\">Como integrar o upload de arquivos Ajax no WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-jquery-ajax-no-wordpress\/\" title=\"Como usar jQuery Ajax no WordPress\">Como usar jQuery Ajax no WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 muito comum hoje em dia carregar uma postagem do WordPress com AJAX. O WordPress n\u00e3o fornece isso por padr\u00e3o. Neste tutorial, explicamos como lidar com essa tarefa.<\/p>\n","protected":false},"author":1,"featured_media":21653,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[613],"tags":[848],"class_list":["post-27648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27648"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27648\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21653"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}