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 →</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:
Wenn ich über die Nummer drei schwebe, sieht das Ende der Schnecke folgendermaßen aus:
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
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.