J'essaie de créer une archive d'utilisateurs. Ma première pensée a été d'utiliser WP_User_Query
dans une page pour créer une boucle secondaire.
$wp_user_query = new WP_User_Query( $args );
// Loop here.
Cela semble bien fonctionner jusqu'à ce que j'essaie de consulter les pages 2, 3, 4, etc.
La requête principale (qui gère la pagination) est destinée à la page . Il n'y a donc qu'un "post" dans la requête principale. Cela signifie qu'il y a une première page:
... mais rien de ce qui suit n'existe aux yeux de la requête principale:
Comme vous pouvez le constater, l'utilisation d'une boucle secondaire ne me convient pas, car la pagination échoue.
Ma question
La boucle principale peut-elle être modifiée pour interroger des utilisateurs et non des publications? Si oui, comment cela peut-il être fait?
Si vous pensez que c'est une mauvaise approche, veuillez expliquer pourquoi (je serais heureux d'entendre d'autres solutions).
Paramètre de pagination GET personnalisé
Nous pouvons utiliser un paramètre de pagination GET personnalisé, par exemple. upage
ou probablement plus unique que wpse-user-page
, à utiliser avec votre WP_User_Query
. De cette façon, vous évitez d’affecter, par exemple, la requête principale post.
Génère des liens de pagination avec pageinate_links()
Nous pouvons utiliser paginate_links()
pour générer la pagination:
$args = array(
'base' => '%_%',
'format' => '?upage=%#%',
'total' => $total_pages, // e.g. ceil( $total_users / $number );
'current' => $current_page, // from our custom GET pagination parameter
);
$paginate_html = sprintf(
'<div class="users-pagination">%s</div>',
paginate_links( $args )
);
Où afficher l'archive utilisateur?
Nous pouvons par exemple l'afficher sur une page donnée, en utilisant un shortcode ou un modèle de page personnalisé .
Confirmez l'URL de pagination de l'archive utilisateur
Voici quelques approches pour simplifier le paramètre de pagination GET personnalisé:
A) Ajoutez-le comme point de terminaison personnalisé aux pages avec:
add_rewrite_endpoint( 'upage', EP_PAGES );
en l'accrochant à l'action init
puis, après avoir enregistré les permaliens, accédez à l'archive utilisateur à partir de toutes les pages:
example.tld/authoes/upage/123/
example.tld/someotherpage/asubpage/upage/123/
... etc ...
Ensuite, nous récupérons la page actuelle avec:
get_query_var( 'upage', 1 );
B) Si nous voulons cibler un slug de page donné (par exemple, authors
), nous pouvons accrocher ce qui suit dans le crochet init
:
add_rewrite_rule(
'^authors/upage/?([0-9]{1,})/?$',
'index.php?pagename=authors&upage=$matches[1]',
'top'
);
puis enregistrez upage
en tant que variable de requête:
add_filter( 'query_vars', function( $vars ) {
$vars[] = 'upage';
return $vars;
} );
Après avoir enregistré les permaliens, nous accédons à l’archive utilisateur à partir de:
example.tld/authors/upage/123/
C) Si nous pouvions également redéfinir la partie page
url, elle correspond à la variable de requête paged
avec:
add_rewrite_rule(
'^authors/page/?([0-9]{1,})/?$',
'index.php?pagename=authors&upage=$matches[1]',
'top'
);
où nous enregistrons upage
comme variable de requête comme auparavant.
Ensuite, après avoir sauvegardé des permaliens, nous pouvons accéder à l’archive utilisateur à partir de:
example.tld/authors/page/123/
D) Nous pourrions aussi simplement utiliser la variable de requête page
pour la page authors
et accéder à l'archive utilisateur avec:
example.tld/authors/123/
où la page actuelle est:
get_query_var( 'page', 1 );
Notez que cela interférerait avec la pagination de contenu , mais il n'y a pas de vérification de limite pour cette variable de requête.
E) Nous pourrions simuler comment la pagination des commentaires est gérée en core, qui utilise une réécriture comme celle-ci:
(.?.+?)/comment-page-([0-9]{1,})/?$
où cpage
est la variable de requête de pagination de commentaire correspondante pour la correspondance ([0-9]{1,})
.
Alternativement, on pourrait également envisager d'utiliser l'API REST avec l'approche javascript. Le noyau est livré avec la bibliothèque client wp-api Backbone qui peut, par exemple, gérer. collection d'utilisateurs.
J'espère que ça aide!