{"id":28119,"date":"2021-05-20T12:45:00","date_gmt":"2021-05-20T09:45:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28119"},"modified":"2021-10-17T16:55:21","modified_gmt":"2021-10-17T13:55:21","slug":"como-cargar-publicaciones-de-wordpress-con-ajax","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-cargar-publicaciones-de-wordpress-con-ajax\/","title":{"rendered":"C\u00f3mo cargar publicaciones de WordPress con AJAX"},"content":{"rendered":"<p>Estoy ejecutando un <a href=\"https:\/\/www.youtube.com\/channel\/UCosi8Kv8-EPLt5TBJLlsWJA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">canal de YouTube<\/a> donde publico videos relacionados con la programaci\u00f3n y el software. Recientemente, uno de los suscriptores me pregunt\u00f3 c\u00f3mo cargar una publicaci\u00f3n de WordPress con AJAX. En respuesta a \u00e9l, decid\u00ed escribir una publicaci\u00f3n sobre su pregunta. Entonces, en este art\u00edculo, estudiamos c\u00f3mo cargar una publicaci\u00f3n de WordPress con AJAX usando un bot\u00f3n de carga m\u00e1s y un desplazamiento de p\u00e1gina.<\/p>\n<p>La diferencia entre cargar m\u00e1s y un desplazamiento de p\u00e1gina es bastante simple. Cuando use el bot\u00f3n Cargar m\u00e1s, debe hacer clic en un bot\u00f3n para ver el siguiente conjunto de publicaciones. Y en el desplazamiento de p\u00e1gina, cuando se desplaza hasta el final de una ventana gr\u00e1fica, el siguiente conjunto de publicaciones deber\u00eda cargarse autom\u00e1ticamente.<\/p>\n<p>Supongamos que tiene un par de publicaciones y necesita mostrar 2 publicaciones en la carga de la p\u00e1gina y luego, al hacer clic en &#8216;Cargar m\u00e1s&#8217; o en &#8216;Desplazamiento de p\u00e1gina&#8217;, deber\u00edan mostrarse las siguientes 2 publicaciones. Este proceso continuar\u00e1 hasta que se muestren todas sus publicaciones.<\/p>\n<p>Crea una nueva p\u00e1gina llamada &#8216;Blog&#8217;. Para mostrar sus publicaciones en la p\u00e1gina del Blog, cree una plantilla personalizada <code>page-blog.php<\/code>en el directorio de su tema activo.<\/p>\n<p>Ahora, cuando los usuarios visiten la p\u00e1gina de su blog, deber\u00edan ver 2 publicaciones. Por lo tanto, agregue el c\u00f3digo a continuaci\u00f3n en su archivo de plantilla personalizada.<\/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>Aqu\u00ed, utilic\u00e9 la clave &#8216;paginado&#8217; y le pas\u00e9 el valor &#8216;1&#8217;. &#8216;paginado&#8217; es una clave utilizada en WordPress cuando se trata de paginaci\u00f3n. &#8216;paged&#8217; =&gt; 1 significa la primera p\u00e1gina.<\/p>\n<p>Notar\u00eda el elemento div con la clase &#8216;loadmore&#8217;. Al hacer clic en Cargar m\u00e1s, realizaremos una llamada Ajax y obtendremos el siguiente conjunto de publicaciones.<\/p>\n<h3>Cargar publicaciones de WordPress con Ajax en el bot\u00f3n Cargar m\u00e1s<\/h3>\n<p>Para realizar una llamada Ajax, debe incluir el archivo JS en el entorno de WordPress. Cree un <code>custom.js<\/code>archivo dentro del <code>js<\/code>directorio y luego agregue el siguiente c\u00f3digo en el <code>functions.php<\/code>archivo.<\/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 continuaci\u00f3n, escribamos un poco de jQuery y hagamos una llamada Ajax que, a cambio, dar\u00e1 las siguientes publicaciones.<\/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>Lo que estamos haciendo aqu\u00ed es que tom\u00e9 una &#8216;p\u00e1gina&#8217; variable de JavaScript con el valor inicial 2 ya que vamos a comenzar con la paginaci\u00f3n de la segunda p\u00e1gina. Estoy incrementando esta variable de &#8216;p\u00e1gina&#8217; despu\u00e9s de recibir la respuesta de Ajax. Despu\u00e9s de recibir la respuesta, la anexar\u00e9 a la lista de publicaciones existentes.<\/p>\n<p>Tambi\u00e9n utilic\u00e9 el par\u00e1metro de acci\u00f3n como &#8216;load_posts_by_ajax&#8217; para una llamada Ajax que debe mapearse con las acciones de WordPress. Abra su <code>functions.php<\/code>archivo y agregue el siguiente c\u00f3digo a un archivo.<\/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>En las acciones de WordPress anteriores, llamamos a la funci\u00f3n de devoluci\u00f3n de llamada <code>load_posts_by_ajax_callback<\/code>que definir\u00e9 en el siguiente paso. Puede definir esta funci\u00f3n en su <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>Ahora, cuando haga clic en el bot\u00f3n &#8216;Cargar m\u00e1s&#8217;, cargar\u00e1 las siguientes publicaciones a trav\u00e9s de Ajax y las devolver\u00e1 en respuesta. El c\u00f3digo JavaScript escrito arriba se encargar\u00eda del resto.<\/p>\n<h3>Cargar publicaciones de WordPress con Ajax en el desplazamiento de p\u00e1gina<\/h3>\n<p>Es posible que algunos usuarios no quieran un bot\u00f3n de carga m\u00e1s para mostrar las publicaciones con Ajax. En cambio, prefieren que las publicaciones se muestren una vez que el usuario llega al final de una ventana gr\u00e1fica.<\/p>\n<p>Para lograr esto, necesita escribir una l\u00f3gica que capture el evento al final de una ventana gr\u00e1fica, el resto del c\u00f3digo es el mismo que el bot\u00f3n &#8216;Cargar m\u00e1s&#8217;. A continuaci\u00f3n se muestra el c\u00f3digo jQuery para el desplazamiento 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>\u00a1Eso es! Puedes seguir adelante y probarlo. Me gustar\u00eda conocer sus pensamientos y sugerencias en los comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-integrar-la-carga-de-archivos-ajax-en-wordpress\/\" title=\"C\u00f3mo integrar la carga de archivos Ajax en WordPress\">C\u00f3mo integrar la carga de archivos Ajax en WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-usar-jquery-ajax-en-wordpress\/\" title=\"C\u00f3mo usar jQuery Ajax en WordPress\">C\u00f3mo usar jQuery Ajax en WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es muy com\u00fan hoy en d\u00eda cargar publicaciones de WordPress con AJAX. WordPress no lo proporciona de forma predeterminada. En este tutorial, explicamos c\u00f3mo manejar esta tarea.<\/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":[606],"tags":[849],"class_list":["post-28119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28119"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28119\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21653"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}