WordPress : l’utilisation de the_posts_navigation() est-elle nécessaire ?

Publié par Jean-Michel le

Je veux créer un thème et le faire approuver sur wordpres.org et je veux qu’il ait une navigation par page numérotée :

entrez la description de l'image ici

Le code HTML doit être le composant de navigation de Bootstrap 4.

je peux accomplir ce qui précède avec une fonction personnalisée:

// Numeric Page Navi (built into the theme by default)
function jbst4_page_navi($before = '', $after = '') {
    global $wpdb, $wp_query;
    $request = $wp_query->request;
    $posts_per_page = intval(get_query_var('posts_per_page'));
    $paged = intval(get_query_var('paged'));
    $numposts = $wp_query->found_posts;
    $max_page = $wp_query->max_num_pages;
    if ( $numposts <= $posts_per_page ) { return; }
    if(empty($paged) || $paged == 0) {
        $paged = 1;
    }
    $pages_to_show = 7;
    $pages_to_show_minus_1 = $pages_to_show-1;
    $half_page_start = floor($pages_to_show_minus_1/2);
    $half_page_end = ceil($pages_to_show_minus_1/2);
    $start_page = $paged - $half_page_start;
    if($start_page <= 0) {
        $start_page = 1;
    }
    $end_page = $paged + $half_page_end;
    if(($end_page - $start_page) != $pages_to_show_minus_1) {
        $end_page = $start_page + $pages_to_show_minus_1;
    }
    if($end_page > $max_page) {
        $start_page = $max_page - $pages_to_show_minus_1;
        $end_page = $max_page;
    }
    if($start_page <= 0) {
        $start_page = 1;
    }
    echo $before.'<nav style="text-align:center"><ul class="pagination">'."";
    if ($start_page >= 2 && $pages_to_show < $max_page) {
        $first_page_text = __( "First", 'jbst-4' );
        echo '<li class="page-link"><a href="'.get_pagenum_link().'" title="'.$first_page_text.'">'.$first_page_text.'</a></li>';
    }
    echo '<li class="page-item">';
    previous_posts_link('<span aria-hidden="true">&laquo;</span>
        <span class="sr-only">'. __( 'Previous', 'jbst-4' ) .'</span>');
    echo '</li>';
    for($i = $start_page; $i  <= $end_page; $i++) {
        if($i == $paged) {
            echo '<li class="page-item active"><span class="page-link"> '.$i.' </span></li>';
        } else {
            echo '<li class="page-item"><a class="page-link" href="'.get_pagenum_link($i).'">'.$i.'</a></li>';
        }
    }
    echo '<li class="page-item">';
    next_posts_link('<span aria-hidden="true">&raquo;</span>
        <span class="sr-only">'. __( 'Next', 'jbst-4' ) .'</span>');
    echo '</li>';
    if ($end_page < $max_page) {
        $last_page_text = __( "Last", 'jbst-4' );
        echo '<li class="page-item"><a class="page-link" href="'.get_pagenum_link($max_page).'" title="'.$last_page_text.'">'.$last_page_text.'</a></li>';
    }
    echo '</ul></nav>'.$after."";
} /* End page navi */
add_filter('next_posts_link_attributes', 'posts_link_attributes_next');
add_filter('previous_posts_link_attributes', 'posts_link_attributes_previous');
function posts_link_attributes_next() {
    return 'class="page-link" aria-label="' . __( 'Next', 'jbst-4' ) . '"';
}
function posts_link_attributes_previous() {
    return 'class="page-link" aria-label="' . __( 'Previous', 'jbst-4' ) . '"';
}

Maintenant, le réviseur de thème me dit « utilisez le noyau the_posts_navigation() pour la navigation de page sur l’index de votre blog ».

le the_posts_navigation()ne me donne pas de pages numérotées. J’ai trouvé les the_posts_pagination()fonctions. Cette fonction n’a pas de crochets ou de filtres pour changer les liens précédents et suivants. J’ai trouvé que je pouvais remplacer la fonction ci-dessus par le code suivant, qui utilise get_the_posts_pagination():

<?php
function jbst4_page_navi() {
// Previous/next page navigation.
echo str_replace (
array('"next page-numbers"','"previous page-numbers"'),
array('"next page-numbers" aria-label="' . __( 'Next', 'jbst-4' ) . '"', '"previous page-numbers" aria-label="' . __( 'Previous', 'jbst-4' ) . '"'),
get_the_posts_pagination( array(
  'prev_text'          => '<span aria-hidden="true">&laquo;</span><span class="sr-only">'. __( 'Previous', 'jbst-4' ) .'</span>',
  'next_text'          => '<span class="page-link" aria-hidden="true">&raquo;</span><span class="sr-only">'. __( 'Next', 'jbst-4' ) .'</span>',
  'show_all'           => true,
  'add_args' => array('class' => 'page-item'),
  'before_page_number' => '<span class="page-link">',
  'after_page_number' => '</span>',
  'screen_reader_text' => __('Page navigation', 'jbst-4')
  )
)
);
}
/* End page navi */

Ce qui précède ne semble pas être une amélioration, je me demande également si j’utilise les fonctionnalités de WordPress maintenant ? Ma question est donc the_posts_navigation()requise dans toutes les situations ?

Solution n°1 trouvée

Le type de pagination que vous souhaitez utiliser est actuellement considéré comme un « territoire de plugin ». Les utilisateurs qui téléchargent votre thème approuvé ne doivent pas être obligés de l’utiliser. Ils peuvent, par exemple, avoir un autre système de pagination qu’ils préfèrent. Par conséquent, un thème doit avoir la pagination barebones the_posts_navigation()en standard. Il s’agit d’assurer la flexibilité aux utilisateurs de votre thème.

Vous pouvez essayer d’inclure votre pagination en option, comme le suggère @majick, mais l’approche formelle consisterait à intégrer votre pagination dans un plugin et à recommander à vos utilisateurs de l’installer avec votre thème.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *