next_posts_link no funciona para un bucle llamado con ajax

4

En mi página de inicio muestro un bucle de publicaciones que permito ser reemplazado por resultados de búsqueda de ajax y otros bucles personalizados. Esos resultados se devuelven en una plantilla con un custom wp_query . El problema es que next_posts_link no está devolviendo el enlace correcto para la página 2 para el ciclo de búsqueda. Lo que obtengo es un enlace a http://mysite.com/wp-admin/admin-ajax.php?paged=2 . A continuación se muestra toda la configuración que utilizo para devolver los resultados. ¿Qué necesito cambiar para obtener la paginación correcta?

// script

jQuery(document).ready(function($){
$('#searchsubmit').click(function(e){
    $('#boxes').empty();
    e.preventDefault();
    var search_val=$("#s").val();
    var $panel = $(this).closest(".panel-container").find(".panel");
    $.post(
        WPaAjax.ajaxurl,
        {
            action : 'wpa56343_search',
            search_val : search_val
        },
        function( response ) {
            $('#boxes').append( response ).masonry( 'reload' );
            $panel.hide("slow");
            $('.trigger').removeClass("active");
        }
    );
  });

});

// función para pasar parámetros de consulta

add_action('wp_ajax_wpa56343_search', 'wpa56343_search');
function wpa56343_search(){
 global $wp_query;
 $search = $_POST['search_val'];
 $args = array(
    's' => $search,
    'posts_per_page' => 10
 );
 $wp_query = new WP_Query( $args );

 get_template_part( 'search-results' );

exit;
}

// Consulta de búsqueda personalizada search-results.php

<?php
  while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

   <------content----->

<?php endwhile; ?>

<?php if ( $wp_query->max_num_pages > 1 ) : ?>

<div class="infinitescroll">
  <?php next_posts_link( __( 'Load more posts', $wp_query->max_num_pages ) ); ?>
</div>

<script type="text/javascript">
 // Infinite Scroll
 var href = 'first';
 $(document).ready(function() {
$('#boxes').infinitescroll({
    navSelector : '.infinitescroll',
    nextSelector : '.infinitescroll a',
    itemSelector : '#boxes .box',
    loadingImg : '<?php echo get_bloginfo('stylesheet_directory') ?>/images/loading.gif',
    loadingText : 'Loading...',
    donetext : 'No more pages to load.',
    debug : false
}, function(arrayOfNewElems) {
    $('#boxes').masonry('appended', $(arrayOfNewElems));
    if (href != $('.infinitescroll a').attr('href'))
    {
        href = $('.infinitescroll a').attr('href');
    }
});
  });
 </script>
 <?php endif; ?>
    
pregunta Pollux Khafra 25.06.2012 - 13:03

1 respuesta

3
El enlace de

próximas publicaciones es un tanto inútil, ya que estás paginando con ajax, ¿no? Eche un vistazo a el código de la respuesta a su otra pregunta en la página del formulario de consulta

var postoffset = $('.post').length;

que cuenta cuántas publicaciones hay en la página y luego las paso como compensación. En tu caso sería .box . cuando pongo eso en la consulta, recibo mensajes que comienzan en ese número:

$offset = $_POST['postoffset'];
$args = array(
    'offset' => $offset,
    'posts_per_page' => 10
);
$wp_query = new WP_Query( $args );

de esa manera puedo usar el mismo botón para cargar más publicaciones, simplemente llama repetidamente a la misma función, verificando cuántas publicaciones hay en la página cada vez.

    
respondido por el Milo 26.06.2012 - 00:50

Lea otras preguntas en las etiquetas