web-dev-qa-db-fra.com

Évitez les publications répétées à la page 2 lorsque vous en excluez un à la page 1

Sur le site que nous développons, le défilement infini est activé par Ajax/JavaScript.

$('#inifiniteLoader').show('fast');
$.ajax({
    url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php",
    type:'POST',
    data: "action=infinite_scroll&cat='<?php echo $cat_id ?>'&exclude='<?php 
        echo get_the_ID() ?>'&page_no="+ pageNumber + '&loop_file=loop', 
    success: function(html){
        $('#inifiniteLoader').hide('1000');
        $("#primary").append(html); // This will be the div where our content will be loaded
    }
});

Sur le site dans son ensemble, cela fonctionne, mais sur la page unique, où sont affichés les articles, puis tous les autres articles de cette catégorie (à l'exception de l'article) sous forme de vignettes, il y a un problème.

Le WP_Query exclut le poste en question:

$args = array ( 'cat' => $catId, 'post__not_in' => $postid );
$custom_query = new WP_Query( $args ); 

Cela fonctionne aussi, mais la pagination ne fonctionne pas.

Exemple: Liste des professeurs

La grille est supposée montrer 8 pouces par page. Le 3 sur la page de formulaire inférieure 2. Lorsque vous cliquez sur une vignette et entrez le message, les vignettes (à l'exception du curseur actuel) sont répétées. Comme vous pouvez le constater, quelque chose ne va pas dans la pagination, car le courant est exclu. La première page en montre une à partir de la page 2. Il s’agit alors du premier message de la page 2, qui entraîne un double message.

Si je change le loop.php pour ignorer le premier message, seuls sept sont affichés et la grille n'est pas remplie.

La requête dans les fonctions ressemble à ceci, et exclut également le post actuel:

function wp_infinitepaginate() {
    $loopFile       = $_POST['loop_file'];
    $paged          = $_POST['page_no'];
    $cats           = $_POST['cat'];
    $exclude        = $_POST['exclude'];
    $posts_per_page = get_option( 'posts_per_page' );

    $showposts = $posts_per_page;
    $offset = ( ( $showposts * $paged ) - $showposts );

    $args = array(
        'cat'            => $cats,
        'posts_per_page' => $showposts,
        'offset'         => $offset,
        'post__not_in'   => array( $exclude ),
    );

    # Load the posts
    //query_posts( array( 'paged' => $paged ) );
    query_posts( $args );

    get_template_part( $loopFile );

    wp_reset_query();   
    exit;
}

Des conseils?

1
Eirik

Vous avez des guillemets simples dans votre chaîne de paramètres - utilisez plutôt un objet pour plus de clarté:

$.ajax({
    data: {
        action: "infinite_scroll",
        cat: "<?php echo $cat_id ?>",
        exclude: "<?php the_ID() ?>",
        page_no: pageNumber,
        loop_file: "loop"
    }
});
0
TheDeadMedic