web-dev-qa-db-fra.com

La pagination ne fonctionne pas sur une requête personnalisée

J'essaie de changer de page lorsque je recherche par catégorie sur mon site Web. Lorsque je ne fais pas de recherche dans une certaine catégorie, je peux changer de page sans problème, mais lorsque je cherche une catégorie, je suis incapable de changer de page.

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
        $orderby = ( get_query_var( 'orderby' ) ) ? absint( get_query_var( 'orderby' ) ) : 'display_name';
        if($_GET['search'] && !empty($_GET['search'])) {
            $search = $_GET['search'];
        }

        if($_GET['category'] && !empty($_GET['category'])) {
            $category = $_GET['category'];
        }

        $args = array(
            'orderby' => 'Rand',
            'number' => 7,
            'paged' => $paged,
            'search' => '*'.esc_attr( $search ).'*',
            'meta_query' => array (
                array(
                    'key' => 'organization_category_2',
                    'value' => $category,
                    'compare' => 'like'
                )
            )
        );


        $user_query = new WP_User_Query($args);

Et mes liens de pagination:

<?php
              $total_user = $user_query->total_users;
              $total_pages=ceil($total_user/7);

                echo paginate_links(array(
                    'base' => get_pagenum_link(1) . '%_%',
                    'format' => '?paged=%#%',
                    'current' => $paged,
                    'total' => $total_pages,
                    'prev_text' => 'Previous',
                    'next_text' => 'Next',
                    'type'     => 'list',
                ));

  ?>

Chaque fois que j'essaie de faire une recherche, j'obtiens une URL comme ceci:

https://mywebsite.ca/directory/?search&category=Government#038;category=Government&paged=2

1
Lewis

Les fonctions de pagination ne fonctionnant pas avec la requête principale, vous devez donc utiliser pre_get_posts au lieu de créer une nouvelle requête pour fonctionner.

Mais vous utilisez WP_User_Query, donc le système de pagination standard ne fonctionnera jamais pour vous. Vous allez devoir "lancer votre propre" système de pagination ici, générer vos propres URL manuellement et définir la page vous-même en fonction de l'URL

2
Tom J Nowell
if( $user_query->max_num_pages > 1 ) {

    $big = 999999;
    echo paginate_links( array(
        'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format'    => '?paged=%#%',
        'current'   => max( 1, $paged ),
        'total'     => $user_query->max_num_pages
    ) );
}

Cela pourrait vous être utile

1
Mukii kumar

Ceci est un exemple tiré de WordPress Codex https://codex.wordpress.org/Function_Reference/paginate_links#Example_With_a_Custom_Query

Exemple de requête personnalisée:

<?php
//Protect against arbitrary paged values
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$args = array(
    'posts_per_page' => 5,
    'category_name' => 'gallery',
    'paged' => $paged,
);

$the_query = new WP_Query( $args );
?>
<!-- the loop etc.. -->

Exemple de paramètres paginate_links adaptés à la requête personnalisée ci-dessus:

<?php
$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $the_query->max_num_pages
) );
?>
0
Stefan