Wordpress Infinite Scroll sin usar ningún plugin

3 feb 2018, 04:52:51
Vistas: 16K
Votos: 4

La información de fondo puede omitirse.


Quería usar la opción de scroll infinito en mi tema de Wordpress, pero no tengo mucha experiencia en Javascript así que probé esta solución:

https://wptheming.com/2012/03/infinite-scroll-to-wordpress-theme/

function custom_infinite_scroll_js() {
    //Código como se indica en el enlace anterior
}
add_action( 'wp_footer', 'custom_infinite_scroll_js', 100 );

Perdí un par de días con el artículo mencionado y luego me di cuenta de que todo está obsoleto e incluso el JS de metafizzy ha sido actualizado.

Los desafíos que enfrenté fueron:

img: La ruta a la imagen del cargador ajax
nextSelector: Selector para el enlace de "publicaciones anteriores".
navSelector: Selector contenedor para los enlaces de navegación anterior/siguiente.
itemSelector: Selector para las publicaciones. Podría ser .hentry, .post, etc.
contentSelector: Div contenedor para tus publicaciones.
  1. No pude entender cómo encontrar estos selectores en mi tema.
  2. Algunos errores en V2

Decidí usar V3 y pasar a la última versión del infinite scroll

V2 ha sido actualizado a V3 Los detalles se pueden encontrar aquí.

https://infinite-scroll.com/extras.html#v2-upgrade-example

Creé una función como esta →

function custom_infinite_scroll_js() {
if ( ! is_singular() ) { ?>
<script>
    var $container = $('.container').infiniteScroll({
    append: '.post',
    path: '.pagination__next',
    status: '.page-load-status',
    });

    // usar evento para callback de v2
    $container.on( 'append.infiniteScroll', function( event, response, path, items ) {
    $( items ).tooltip();
    });
</script>
<?php
}
}
add_action( 'wp_footer', 'custom_infinite_scroll_js', 100 );

Pero en realidad no crea un scroll infinito. ¿Alguien puede guiarme sobre cómo proceder?

1
Comentarios

@David Sword, he aceptado la edición, ¿puedes sugerir una solución funcional?

WordCent WordCent
3 feb 2018 07:10:15
Todas las respuestas a la pregunta 2
0

Para el scroll infinito en artículos individuales, a continuación se presenta la solución:

single.php

<div class="blog-article-section"> 
<?php while( have_posts() ): ?>   
<div class="blog-article">
  <?php if( have_posts() ): the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <p><?php the_content(); ?></p>
  <?php endif;  ?>
  <div class="pagination-single" >
    <div class="next_post_link"><?php previous_post_link( '%link','Artículo anterior' ) ?></div>
    <div class="previous_post_link"><?php next_post_link( '%link','Artículo siguiente' ) ?></div>
  </div>
</div>
<?php endwhile; ?>
</div>
<div class="blog-article1"></div>
<a href="#" class="loadArticle">Cargar más</a>

script.js

(function($) {
$(document).ready(function(){
    var next_count = 1;
    $('.next_post_link a').attr("id", "next"+next_count);
    var prev_count = 1;
    $('.prev_post_link a').attr("id", "prev"+prev_count);
    $(".loadArticle").click(function(e) {
        e.preventDefault();
        loadNextArticle();
    });
    $(window).scroll(function(){
        loadNextArticle();
        console.log('scroll')
    });
    function loadNextArticle(){
        var next_link = $("#next"+next_count).attr("href");
        var prev_link = $("#prev"+prev_count).attr("href");
         if(typeof(next_link) != "undefined"){
            $.ajax({
              type: "GET",
              url: next_link,
              data: {},
              async: false,
              success: function(data){
                next_count = ++next_count;
                var result = $(data);
                $('.next_post_link a', result).attr("id","next"+next_count);
                result.find('.blog-article').appendTo('.blog-article1').fadeIn('slow');
              }
            });
        } 
    }
});
}(jQuery));
7 sept 2018 13:01:42
3

Para implementar scroll infinito en WordPress, puedes utilizar varios métodos, incluyendo JavaScript con la API REST de WordPress o una biblioteca como jQuery. A continuación, se muestra una guía paso a paso para implementar scroll infinito utilizando JavaScript y la API REST de WordPress.

Paso 1: Registrar Scripts

Primero, registra tu archivo JavaScript en el archivo functions.php de tu tema.

function enqueue_infinite_scroll_script() {
    wp_enqueue_script(
        'infinite-scroll',
        get_template_directory_uri() . '/js/infinite-scroll.js',
        array('jquery'),
        null,
        true
    );

    // Localizar script para pasar datos a JavaScript
    wp_localize_script(
        'infinite-scroll',
        'infinite_scroll_params',
        array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'query_vars' => json_encode($wp_query->query),
        )
    );
}
add_action('wp_enqueue_scripts', 'enqueue_infinite_scroll_script');

Paso 2: Crear Archivo JavaScript

Crea un archivo js/infinite-scroll.js en el directorio de tu tema. Este archivo manejará la solicitud AJAX para cargar más publicaciones.

jQuery(function($) {
    var canBeLoaded = true, // este parámetro permite iniciar la llamada AJAX solo si es necesario
        bottomOffset = 2000; // la distancia (en px) desde la parte inferior de la página cuando quieres cargar más publicaciones

    $(window).scroll(function() {
        var data = {
            'action': 'loadmore',
            'query': infinite_scroll_params.query_vars, // así obtenemos los parámetros de la función wp_localize_script()
            'page': infinite_scroll_params.current_page
        };

        if ($(document).scrollTop() > ($(document).height() - bottomOffset) && canBeLoaded == true) {
            $.ajax({
                url: infinite_scroll_params.ajax_url,
                data: data,
                type: 'POST',
                beforeSend: function(xhr) {
                    canBeLoaded = false; // desactiva la llamada AJAX mientras está en progreso
                },
                success: function(data) {
                    if (data) {
                        $('#content').find('article:last-of-type').after(data); // inserta nuevas publicaciones
                        infinite_scroll_params.current_page++;
                        canBeLoaded = true; // la llamada AJAX está completa, ahora podemos permitirla nuevamente
                    }
                }
            });
        }
    });
});

Paso 3: Manejar la Solicitud AJAX

En el archivo functions.php de tu tema, agrega una función para manejar la solicitud AJAX y devolver las publicaciones.

function loadmore_ajax_handler() {
    // Preparamos nuestros argumentos para la consulta
    $args = json_decode(stripslashes($_POST['query']), true);
    $args['paged'] = $_POST['page'] + 1; // necesitamos cargar la siguiente página
    $args['post_status'] = 'publish';

    // Consultamos las publicaciones
    query_posts($args);

    if (have_posts()) :
        // Iniciamos el bucle
        while (have_posts()): the_post();

            // Tu contenido aquí
            get_template_part('template-parts/content', get_post_format());

        endwhile;
    endif;
    die; // aquí salimos del script y ni siquiera es necesario wp_reset_query()!
}

add_action('wp_ajax_loadmore', 'loadmore_ajax_handler'); // si se llama desde el panel de administración
add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler'); // si se llama desde otro lugar

Paso 4: Modificar la Consulta

Modifica tu consulta principal para pasar los parámetros necesarios a JavaScript.

global $wp_query;
wp_localize_script('infinite-scroll', 'infinite_scroll_params', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'query_vars' => json_encode($wp_query->query),
    'current_page' => get_query_var('paged') ? get_query_var('paged') : 1,
));

Paso 5: Agregar Estilos para Scroll Infinito (Opcional)

Puedes querer agregar algunos estilos para el indicador de carga u otros elementos relacionados con el scroll infinito.

/* Ejemplo de CSS para el indicador de carga */
.loading {
    text-align: center;
    padding: 20px;
    display: none;
}

.loading img {
    width: 32px;
    height: 32px;
}

Resumen

Con estos pasos, habrás implementado scroll infinito en tu sitio de WordPress. Ajusta el código según sea necesario para que se adapte a la estructura y diseño de tu tema.

3 feb 2018 12:08:42
Comentarios

este es un código obsoleto que no funcionará. Lee las cosas con cuidado. Está claramente mencionado en mi publicación que el script ya ha sido actualizado de V2 a V3. Intenta pegar este código y el navegador lanzará un error de Javascript incluso cuando el javascript se esté cargando.

WordCent WordCent
3 feb 2018 13:11:16

¿Probaste esto.. https://www.billerickson.net/infinite-scroll-in-wordpress/

Xaib Aslam Xaib Aslam
6 feb 2018 16:33:49

Sí, y también funciona, pero ese script no parece muy prometedor, pero el que publiqué en la pregunta principal, el ingeniero de Google también está involucrado en su creación, así que confío un poco más en ese.

WordCent WordCent
7 feb 2018 03:55:15