web-dev-qa-db-fra.com

next_posts_link ne fonctionne pas pour la boucle appelée avec ajax

Sur ma page d’accueil, j’affiche une boucle de publications que je permets d’être remplacées par des résultats de recherche ajax et d’autres boucles personnalisées. Ces résultats sont renvoyés dans un modèle avec un custom wp_query. Le problème est que next_posts_link ne renvoie pas le lien correct pour la page 2 pour la boucle de recherche. Ce que je reçois est un lien vers http://mysite.com/wp-admin/admin-ajax.php?paged=2. Vous trouverez ci-dessous la configuration complète que j'utilise pour renvoyer les résultats. Que dois-je changer pour obtenir la bonne pagination?

//scénario

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");
        }
    );
  });

});

// fonction pour passer des paramètres de requête

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;
}

// Requête de recherche personnalisée 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; ?>
4
Pollux Khafra

le lien suivant est quelque peu inutile puisque vous paginez avec ajax, non? jetez un oeil à le code de la réponse à votre autre question à comment je pagine la requête-

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

qui compte combien de messages sont sur la page et puis je passe cela comme le décalage. dans votre cas, ce serait .box. lorsque je mets cela dans la requête, je récupère les messages commençant par ce nombre:

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

de cette façon, je peux utiliser le même bouton pour charger plus de messages, il appelle la même fonction à plusieurs reprises, en vérifiant le nombre de messages affichés sur la page à chaque fois.

3
Milo