web-dev-qa-db-fra.com

Aide sur la pagination sur la page Crazy Custom Authors

J'ai une page d'auteurs personnalisée pour un blog multi-auteurs.

http://blog.securitytechnologies.com/meet-the-team/

Voici le code que j'utilise pour générer la page (merci à d'autres personnes des forums d'assistance qui l'ont fournie):

<?php
$excluded = "1,2,3,7,20,21";  // To exclude external admin author IDs
$sql = "SELECT DISTINCT post_author, umeta.meta_value as last_name
FROM $wpdb->posts
JOIN $wpdb->usermeta umeta ON ($wpdb->posts.post_author = umeta.user_id
AND umeta.meta_key = 'last_name')
WHERE post_author NOT IN ($excluded)
AND post_status = 'publish'
AND post_type = 'post'
ORDER BY last_name, post_author
";
$authors = $wpdb->get_results($sql);    
if($authors):
foreach($authors as $author):
?>    

Ce que je ne peux pas comprendre, c'est comment définir un nombre maximum d'auteurs par page et paginer. J'ai installé WP-PageNavi, mais je n'ai aucune chance de l'implémenter ici sur une page de modèle personnalisée.

Merci d'avance.

3
Matt Chandler

Je doute que vous puissiez réutiliser WP-PageNavi pour cela, car vous n'utilisez pas du tout les requêtes intégrées. Cependant, vous devriez être capable de rouler vous-même en pagination, tout en ayant recours à certaines fonctionnalités intégrées de WordPress.

En particulier, si votre URL correspond au modèle/meet-the-team/page/3 /, la variable paged querystring sera automatiquement renseignée avec 3. Vous pouvez l'utiliser, puis parcourez les auteurs appropriés dans votre liste. Voici un peu de code rapide:

<?php
$authors_per_page = 5;
$page_number = preg_replace("/[^0-9]/", "", $_GET["paged"]); // don't trust querystring vars
if (empty($page_number))
    $page_number = 1;

$excluded = "1,2,3,7,20,21";  // To exclude external admin author IDs
$sql = "..."; // SQL unchanged, omitted

$authors = $wpdb->get_results($sql);    
if ($authors) :
    $author_count = count($authors);
    $first_author = ($page_number - 1) * $authors_per_page;
    $last_author = min($first_author + $authors_per_page, $author_count);

    foreach ($i = $first_author; $i < $last_author; $i++) :
?>    

<!-- display author -->

<?php
    endforeach;

    // show previous and next page links
    if ($page_number > 1) {
        echo '<a href="/meet-the-team/page/' . ($page_number - 1) . '/">Previous page</a>';
    }
    if ($last_author < $author_count) {
        echo '<a href="/meet-the-team/page/' . ($page_number + 1) . '/">Next page</a>';
    }

endif;
?>
1
Nate Cook