Search code examples
phpwordpressinfinite-scrollwordpress-jetpack

Jetpack Infinite Scroll ignore posts already displayed


I am using JetPack's Infinite Scroll on the homepage of our site and it is working fine but I also want to display certain posts on there.

If a post is displayed outside the infinite loop I want it to be removed from the so there is no duplication.

I have a global array set up using bm_ignoreposts and have added it to the infinite loop render but for some reason it is not working. Here is the code.

Functions.php

The infinite renderer.

add_filter( 'infinite_scroll_archive_supported', 'tweakjp_custom_is_support' );

function mm_infinite_scroll_render() {
global $post;
        while ( have_posts() ) : the_post();
            bm_ignorePost($post->ID);
            get_template_part( 'content-inf' );
        endwhile;
}

The query

function mm_infinite_scroll_query_args($args) {
    $new_args = array(
        'posts_per_page'   => $args['posts_per_page'],
        'paged'   => $args['paged'],
        'orderby'          => 'date',
        'order'            => 'DESC',
        'post_type'        => array( 'post', 'features', 'it_hardware', 'videos' ),
        'post_status'      => 'publish',
    );

    return $new_args;
}

For reference here is the ignore posts code:

function bm_ignorePost ($id) {
    if (!is_page()) {
        global $bmIgnorePosts;
        $bmIgnorePosts[] = $id;
    }
}

Solution

  • I decided to not use JetPack anymore and go for a custom Javascript version which uses AJAX to load new posts running a new query.

    After speaking to Jetpack support, they believe it is not possible based on how the plugin works.