wake-up-neo.net

Die Paginierung funktioniert bei benutzerdefinierten Abfragen nicht

Ich versuche, die Seiten zu ändern, wenn ich auf meiner Website nach Kategorien suche. Wenn ich nicht unter einer bestimmten Kategorie suche, kann ich die Seiten wechseln, aber wenn ich nach einer Kategorie suche, kann ich die Seiten nicht wechseln.

$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);

Und meine Paginierungslinks:

<?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',
                ));

  ?>

Immer wenn ich versuche, eine Suche durchzuführen, erhalte ich eine URL wie die folgende:

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

1
Lewis

Die Paginierungsfunktionen arbeiten von der Hauptabfrage ab, sodass Sie pre_get_posts verwenden müssen, anstatt eine neue Abfrage zu erstellen, damit sie funktionieren.

Da Sie jedoch WP_User_Query verwenden, wird das Standard-Paginierungssystem für Sie niemals funktionieren. Sie müssen hier Ihr eigenes Paginierungssystem erstellen, Ihre eigenen URLs manuell generieren und die Seite selbst basierend auf der URL einrichten

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
    ) );
}

Dies könnte für Sie nützlich sein

1
Mukii kumar

Dies ist ein Beispiel aus dem offiziellen WordPress-Codex https://codex.wordpress.org/Function_Reference/paginate_links#Example_With_a_Custom_Query

Beispiel einer benutzerdefinierten Abfrage:

<?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.. -->

Beispiel für paginate_links-Parameter, die an die oben angegebene benutzerdefinierte Abfrage angepasst wurden:

<?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