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; ?>
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.