it-swarm.com.de

Lass die Paginierung (WP-PageNavi) nicht funktionieren

Ich habe mehrere Probleme, um die Paginierungsarbeit zu bekommen.

Ich habe eine benutzerdefinierte Seitenvorlage, in der ich alle Blog-Beiträge anzeigen muss. Ich baue die folgende "Abfrage" auf und baue meine HTML-Struktur auf:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array( 
    'post_type'         => 'post',
    'orderby'           => 'date',
    'order'             => 'DESC',
    'post_status'       => 'publish',
    'posts_per_page'    => 5,
    'paged'             => $paged,
);
$posts = get_posts( $args );

if ( ! empty( $posts ) && ! is_wp_error( $posts )) {
   $displaylist = '<div class="list-group">';

    foreach ( $posts as $post ) {
        /* loop stuff */
    }

    $displaylist .= '</div>';

    echo( $displaylist );
    wp_pagenavi( array( 'type' => 'multipart' ) );
}

damit bekomme ich die posts wie erwartet aber nicht die pagination controls.

Bitte beachten Sie: Es handelt sich nicht um die "Hauptseite", sondern um eine Unterseite.

Nach Recherchen stelle ich fest, dass viele dies verwenden:

$posts = new WP_Query( $args );

an Stelle von:

$posts = get_posts( $args );

wenn ich die WP_Query($args) benutze, bekomme ich viele leere Posts, während ich nur 3 Posts habe.

Ich habe keine Ahnung, was ich falsch mache, aber ich bin ein absoluter Neuling in WordPress und PHP.

1
Manu Zi

Einige Probleme hier;

  • Verwenden Sie get_posts nicht für paginierte Abfragen. Es unterbricht/ignoriert die Paginierung legal, wenn es no_found_rows=true an WP_Query übergibt. Außerdem gibt get_posts nur die Eigenschaft $posts aus dem Abfrageobjekt zurück, und die Paginierung benötigt andere Eigenschaften aus dem Abfrageobjekt, um die Paginierung zu berechnen. Sie können get_posts paginieren, aber es ist eine wirklich chaotische Angelegenheit, und get_postsis just a wrapper function forWP_Query`.

  • Verwenden Sie nicht die globale Variable $posts ( oder eine andere globale Variable in Wordpress oder PHP ) als benutzerdefinierte Variable. Dies unterbricht die globalen Variablen, wenn Sie der Variablen einen anderen Inhalt zuweisen. Dies ist das wahrscheinlichste Problem, das zu inkonsistenten Ergebnissen Ihrer Abfrage mit WP_Query führt. Verwenden Sie immer benutzerdefinierte Variablen. Die einzige Ausnahme ist, wenn Sie setup_postdata( $post ) mit get_posts oder ähnlichen Funktionen verwenden. setup_postdata() erfordert die Verwendung von $post global. Hier müssen Sie daran denken, wp_reset_postdata() zu verwenden, nachdem Sie den $post global wiederhergestellt haben

  • Wenn Sie get_posts verwenden, müssen Sie nicht nach einem WP_Error-Objekt suchen, da get_posts nur ein Array von Posts oder ein leeres Array zurückgibt. Es wird niemals ein WP_Error Objekt zurückgegeben

Sie sollten Folgendes versuchen:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array( 
    'post_type'         => 'post',
    'orderby'           => 'date',
    'order'             => 'DESC',
    'post_status'       => 'publish',
    'posts_per_page'    => 5,
    'paged'             => $paged,
);
$q = new WP_Query( $args ),

if ( $q->have_posts() ) {

    $displaylist = '<div class="list-group">';

    while ( $q->have_posts() ) {
    $q->the_post();

        // LOOP STUFF HERE

    } // endwhile

    $displaylist .= '</div>';

    wp_pagenavi( array( 'query' => $q ) );

    wp_reset_postdata(); // VERY VERY IMPORTANT

} // endif
3
Pieter Goosen