wake-up-neo.net

Paginate_links können nicht mit einer benutzerdefinierten Abfrage verwendet werden

Ich habe in meiner Wordpress-Site einen News-Bereich mit den erweiterten benutzerdefinierten Feldern und benutzerdefinierten UI-Plugins für Beitragstypen erstellt. Auf der benutzerdefinierten Nachrichtenübersichtsseite (nicht den Standard-WordPress-Posts) wollte ich die Anzahl der Nachrichten pro Seite auf sechs begrenzen und eine Navigation mit paginate_links bereitstellen. Ich habe das folgende Snippet erstellt:

<section class="news-main" role="main">
    <?php
        $args = array(
            'post_type' => 'news',
            'posts_per_page' => '6'
        );
        $the_query = new WP_Query( $args );
        $temp_query = $wp_query;
        $wp_query = NULL;
        $wp_query = $the_query;
        $pagination = array(
            'base' => '%_%',
            'format' => '?page=%#%',
            'total' => $the_query->max_num_pages,
            'prev_next' => True,
            'prev_text' => __( '<< Previous' ),
            'next_text' => __( 'Next >>' )
        );
        if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <article class="news-snippet">
            <header class="news-box">
                <h2 class="mus-hi slogan-head fancy"><span class="fancy-hook"><?php the_time( 'j. F Y' ); ?></span></h2>
                <a href="<?php the_permalink(); ?>"><p class="bran-hn slogan-state closure"><?php the_title(); ?></p></a>
            </header>
            <div class="news-wrap">
                <p class="news-excerpt"><?php echo acf_excerpt( 'news_post', 35, ' <span class="news-more-inbox">[...]</span>' ); ?></p>
                <p class="bran-hn news-more"><a href="<?php the_permalink(); ?>">More &rarr;</a></p>
            </div>
        </article>
    <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
    <?php else: ?>
        <p>No entries</p>
    <?php endif; ?>
    <nav>
        <?php echo paginate_links( $pagination );
                $wp_query = NULL;
                $wp_query = $temp_query; ?>
    </nav>
</section>

Zuerst werden die Argumente für die wp_query definiert, dann wird $the_query mit einer WP_Query gesetzt, danach wird die $wp_query-Variable in eine temporäre Variable gespeichert, mit NULL zurückgesetzt und dann auf die $the_query-Variable gesetzt. Im letzten Schritt wird das Einstellungsarray für den paginate_links festgelegt. Dann gibt es die Schleife zum Ausgeben von Nachrichtenbeiträgen. Nach der Schleife wird die Funktion paginate_links aufgerufen und schließlich der $wp_query zurückgesetzt und der Inhalt der temporären $temp_query-Variablen zurückgeschrieben.

Wenn ich 15 Blog-Posts geschrieben habe, sieht meine Ausgabe folgendermaßen aus:

paginate_links layout

Wenn ich über die Nummer drei schwebe, sieht das Ende der Schnecke folgendermaßen aus:

slug for page 3

Problem ist nun, dass die vorherigen und nächsten Links nicht angezeigt werden, auch wenn sie gesetzt sind. Während das Hauptproblem die angegebene Schnecke ist - wenn ich auf die Nummer drei klicke, lande ich auf einer 404-Seite. "Seite 3", auf die ich verwiesen werde, ist für WordPress unbekannt. Vielen Dank im Voraus, Ralf

Update:

$args = array(
    'post_type' => 'news',
    'posts_per_page' => '1'
);  
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $current_page = new WP_Query('post_type=news&posts_per_page=1&paged=' . $paged);
    $pagination = array(
        'base' => '%_%',
        'format' => '?paged=%#%',
        'mid-size' => 1,
        'current' => $current_page,
        'total' => $total_pages,
        'prev_next' => True,
        'prev_text' => __( '<< Previous' ),
        'next_text' => __( 'Next >>' )
    );
}

Update 2:

Ok, mit den folgenden Änderungen am ersten Teil des Codes habe ich das Navi zum Laufen gebracht

$args = array(
    'post_type' => 'news',
    'posts_per_page' => '3',
    'paged' => get_query_var( 'paged' )
);  
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
    $the_paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $pagination = array(
        'base' => @add_query_arg('paged','%#%'),
        'format' => '?paged=%#%',
        'mid-size' => 1,
        'current' => $the_paged,
        'total' => $total_pages,
        'prev_next' => True,
        'prev_text' => __( '<< Previous' ),
        'next_text' => __( 'Next >>' )
    );
}

Die einzige Frage, die ich noch habe (die einzige Sache, die sich immer noch schlecht benimmt), ist die Möglichkeit, dass der erste Link einen Link anstelle von link /? Paged = 1 hat

1
rpk

Lesen Sie hinsichtlich der Anzahl der angezeigten Seiten die Argumente für paginate_links durch, insbesondere end_size und mid_size.

Das Problem ist, dass es keine Seite 3 gibt. Ob eine Seite Inhalt zurückgibt oder die Vorlage 404 lädt, hängt von den Ergebnissen der Hauptabfrage ab, nicht von Ihrer benutzerdefinierten Abfrage, die Sie in der ausführen Vorlage. Wenn es sich um einen page-Beitragstyp handelt, versuchen Sie, die paged-Abfragevariable anstelle von page festzulegen.

4
Milo