it-swarm.com.de

Wie verwende ich die_posts_navigation für wp_query und get_posts?

WordPress hat seit 4.1.0 die Funktion the_posts_navigation. Aber ich weiß nicht, wie ich mit wp_query oder get_posts umgehen soll. Der folgende Code befindet sich in einer Vorlagendatei der Seite.
wp_query Methode:

    <?php
    if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
    } else if ( get_query_var('page') ) {
    $paged = get_query_var('page');
    } else {
    $paged = 1;
    }

    $get_posts=new wp_query('post_type=case&posts_per_page=2&paged='.$paged);

    while($get_posts->have_posts()):$get_posts->the_post();
    the_title();
    endwhile;

    the_posts_pagination( array(
        'prev_text'          => __( 'Previous page', 'cm' ),
        'next_text'          => __( 'Next page', 'cm' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
    ) );
    ?>

Methode get_posts:

    <?
    while(have_posts()):the_post();
    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
        } else if ( get_query_var('page') ) {
        $paged = get_query_var('page');
        } else {
        $paged = 1;
    }

    $case_posts=get_posts('post_type=case&posts_per_page=2&paged='.$paged);
    echo '<pre>';
    print_r($case_posts);
    echo '</pre>';
    foreach($case_posts as $case_post){
        echo $case_post->post_title;
    }
    endwhile;
    // Previous/next page navigation.
    the_posts_pagination( array(
        'prev_text'          => __( 'Previous page', 'cm' ),
        'next_text'          => __( 'Next page', 'cm' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'cm' ) . ' </span>',
    ) );
    ?>

Sie funktionieren nicht und zeigen Paginierung an, aber wenn Sie http://127.0.0.1/gdboer/?page_id=74&page=2 manuell in die Adressleiste eingeben, funktioniert es. Wer kann mir helfen, vielen Dank!

6
Vincent Wong

the_posts_navigation() ist einfach eine Wrapper-Funktion für get_the_posts_navigation() , die einfach eine Wrapper-Funktion für paginate_links darstellt. Die ersten beiden Funktionen verwenden genau die Parameter, die von paginate_links verwendet werden, und übergeben sie auch an die letztere Funktion

get_the_posts_navigation() und the_posts_navigation() sind gute neue Funktionen, da sie viele benutzerdefinierte Codierungen eliminieren und für neue unerfahrene Benutzer, die nummerierte Paginierungslinks wünschen, benutzerfreundlicher sind

Der einzige Fehler in dieser get_the_posts_navigation() ist, dass die Entwickler die paginate_links -Funktion in eine bedingte Anweisung eingebunden haben, die besagt, dass die erste Seite $wp_query und die zweite Seite 0 ist, wenn die Hauptabfrage (2) weniger als 1 Seite hat. ), zeige die Links nicht. Dies ist problematisch für benutzerdefinierte Abfragen in Seitenvorlagen. Seiten haben immer nur eine Seite, sodass diese Funktionen bei benutzerdefinierten Abfragen nicht funktionieren

Die einzig wahre Problemumgehung, wenn Sie the_posts_navigation() verwenden müssen, besteht darin, die @ChipBennet-Antwort in diesem Beitrag zu verwenden. Ich mag es wirklich nicht, die Hauptabfrage zu nullen (ziemlich hacky, meiner Meinung nach ist dies genau wie die Verwendung von query_posts), aber ich kann keine andere Lösung finden, um get_the_posts_navigation() für die Arbeit mit benutzerdefinierten Abfragen zu machen

8
Pieter Goosen

Ich habe eine benutzerdefinierte Vorlage und habe mich stundenlang bemüht, die Paginierungskomponente anzuzeigen. hier, was bei mir funktioniert hat.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'posts_per_page' => 3,
    'orderby' => 'menu_order',
    'order'=> 'ASC',
    'paged'=>$paged,
    'post_type' => 'projects'
    );

$projects = new WP_Query($args);

            <!-- working example of pagination with numbers -->
            ...<?php endwhile;?>
                <?php 
                $GLOBALS['wp_query']->max_num_pages = $projects->max_num_pages;
                the_posts_pagination( array(
                   'mid_size' => 1,
                   'prev_text' => __( 'Back', 'green' ),
                   'next_text' => __( 'Onward', 'green' ),
                   'screen_reader_text' => __( 'Posts navigation' )
                ) ); ?>
             OR
             <!-- working example of pagination without numbers -->
             ...<?php endwhile;?>   
             <?php next_posts_link(  'next', $projects->max_num_pages ); ?>
             <?php previous_posts_link('prev') ?>
5
Eran Or

Diese Funktion verwendet die Funktion get_the_posts_pagination() , die den GLOBAL wp_query verwendet, um die Funktion paginate_links() einzurichten. Ich glaube also, dass dies für get_posts nicht funktioniert.

Versuchen Sie, die Funktion paginate_links() für sich oder die Funktion posts_nav_link() zu verwenden.

PS: Stellen Sie sicher, dass Sie wp_reset_query() verwenden

2
Leo Caseiro