web-dev-qa-db-fra.com

Obtenir le numéro de la page avec un défilement infini

J'ai ajouté le support de défilement infini du plugin Jetpack à mon propre thème en utilisant ce tutoriel :

add_theme_support( 'infinite-scroll', array(
    'container'  => 'content',
    'footer' => false,
    'render' => 'vividflow_infscroll_render',
    'wrapper' => 'post_summaries',
    'posts_per_page' => 12,
    'type' => 'scroll'
) );

Maintenant, j'ai besoin de quelque chose comme un compteur qui incrémente chaque fois que des posts supplémentaires sont chargés.

Je sais que les nouveaux articles sont placés dans un infinite-view-nclass et j’ai une fonction JavaScript à laquelle je veux faire appel pour cette nouvelle classe chargée:

function setupPostSummaries(counter) {
    jQuery('.infinite-view-'+counter).doSomething();
}

Je suppose donc que j’ai besoin d’une variable PHP dans la fonction de rendu avec défilement infini ou dans la boucle qui s’incrémente chaque fois que des publications supplémentaires sont chargées. Ensuite, je peux faire à la fin de la boucle:

<script type="text/javascript">setupPostSummaries(<?php the_counter(); ?>);</script>

Une telle variable existe-t-elle déjà? Ou y a-t-il un autre moyen d'atteindre mon objectif?

7
Keelan

Saisir les valeurs

Normalement, vous accédez simplement à l'objet $wp_query ou, si vous avez déjà effectué une requête personnalisée telle que $my_query = new WP_Query();, à l'objet $my_query. À partir de là, vous pouvez obtenir le $wp_query->numberposts (ou mieux, non obsolète: $wp_query->found_posts) pour le montant total des publications et $wp_query->posts_per_page pour le nombre de publications par page.

Dans un plugin

Il suffit d'écrire un petit plugin pour faire ce travail pour vous:

<?php
/* Plugin Name: Infinite Scroll Counter Script */
add_action( 'wp_enqueue_scripts', 'wpse88834_add_script' );
function wpse88834_add_script()
{
    wp_enqueue_script(
        'wpse_counter',
        plugin_dir_url( __FILE__ ).'js/counter.js',
        array( 'jquery' ), // the infinte scroll script should also be added as dependency
        filemtime( plugin_dir_path( __FILE__ ).'js/counter.js' ),
        true
    );
    wp_localize_script(
        'wpse_counter',
        'wpse_counter_obj',
        array(
            'numberposts'    => $GLOBALS['wp_query']->numberposts,
            'found_posts'    => $GLOBALS['wp_query']->found_posts,
            'posts_per_page' => $GLOBALS['wp_query']->posts_per_page,
        )
    );
}

Lorsque vous êtes alors dans votre script, vous pouvez y accéder facilement.

/* Inside ~/js/counter.js */
jQuery( document ).ready( function($) {
    /* wpse_counter_obj.numberposts */
    wpse_counter_obj.found_posts
    wpse_counter_obj.posts_per_page
    // Current
    var post_count_curr = 0;
    post_count_curr  += wpse_counter_obj.found_posts;
    console.log( post_count_curr  );
} );

Il ne vous reste plus qu'à ajouter un écouteur d'événement au défilement infini et à incrémenter le compteur.

7
kaiser

J'ai rencontré le même problème et utilisé les éléments suivants pour obtenir le numéro de page:

$curPage = (get_query_var('paged') ? get_query_var('paged') : 1) + 1;

Je ne peux pas dire pourquoi il est désactivé lors de la création d'un WP_Query personnalisé, mais c'est correct si ce n'est pas le cas - ceci peut être spécifique au thème que je personnalise. Mais cette valeur est incrémentée pour chaque appel.

2
ViNull

Une solution à le problème de n'affecter que le dernier ensemble de messages, mais pas à la question d'obtenir un "numéro de page", est ici:

Tous les nouveaux articles sont chargés dans un div avec la classe post_summaries. Vous pouvez éditer votre fonction JavaScript pour qu'elle n'affecte que le dernier élément avec ce code:

function setupPostSummaries() {
    jQuery('.post_summaries').last().doSomething();
}

Cependant, comme dit, cela résout le problème mais pas la question.

1
Keelan