OK,
Also habe ich eine benutzerdefinierte WP_Query erstellt, die den post_type- post
erhält und ihn als formatierte Liste ausgibt. Es funktioniert gut und gibt die formatierte Liste aus, aber darunter werden alle Posts wieder angezeigt, aber in einem völlig anderen Format (unstyled).
'post', 'post_status' => 'publish', 'pagination' => true, 'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 'posts_per_page' => 20, 'order' => 'ASC', 'orderby' => 'date', ); ?> have_posts()): ?> have_posts()): $wp_query->the_post() ?> <a href="https://wordpress.stackexchange.com/questions/154197/custom-wp-query-not-working-correctly/" class="fancybox"> <a href="https://wordpress.stackexchange.com/questions/154197/custom-wp-query-not-working-correctly/" class="btn btn-primary">View full story <a href="https://wordpress.stackexchange.com/questions/154197/custom-wp-query-not-working-correctly/#disqus_thread" class="btn btn-default"> Comments
<?php previous_posts_link(' Previous page'); ?> <?php next_posts_link('Next page '); ?> No news right now, please check back later.
Dies ist alles in einer Vorlage partiell und wird mit der Methode get_template_part()
aufgerufen. Wenn ich die WP_Query einer anderen Variable als $wp_query
zuweise, $wp_query
sie sich nicht, aber ich brauche sie als $wp_query
damit die Paginierungslinks funktionieren. Ich $wp_query
auch $wp_query
und $wp_query
die Post-Daten am Ende der Schleife zurück. Verwirrt und ich hoffe du kannst helfen!
Verwenden Sie wp_reset_query()
, um die ursprüngliche Abfrage wiederherzustellen. Dies ruft auch wp_reset_postdata
, Sie können das also einfach ersetzen.
Das ist persönliche Vorliebe, aber ich mag $wp_query
nicht wirklich und kompliziere Dinge. Es gibt zwei Wege, um dieses Problem zu lösen: $wp_query
, indem Sie eine temporäre Variable mit $wp_query
und $wp_query
den Namen Ihrer Variablen $wp_query
und die $wp_query
, was ich wiederum für Ihre persönlichen Präferenzen empfehlen würde
METHODE 1
Wie ich schon sagte, können Sie $wp_query
eine temporäre Variable $wp_query
und sie ebenfalls $wp_query
< ?php // get all post types $args = array ( 'post_type' => 'post', 'post_status' => 'publish', 'pagination' => true, 'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 'posts_per_page' => 20, 'order' => 'ASC', 'orderby' => 'date', ); $temp = $wp_query; $wp_query = null; $wp_query = new WP_Query(); $wp_query->query( $args ); < --- YOUR LOOP ETC---> $wp_query = null; $wp_query = $temp; // Reset
Methode 2
Dies ist die Methode, die ich bevorzuge. Geben Sie Ihrer Variablen einen eindeutigen Namen, z. B. $my_query
und korrigieren Sie die next_posts_link
in next_posts_link
. So wird Ihre benutzerdefinierte Abfrage jetzt aussehen. ( Hinweis: Keine Notwendigkeit, das PHP-Tag zu missbrauchen. Wenn Sie nicht von PHP zu HTML wechseln und umgekehrt, müssen Sie PHP-Tags nicht für jedes Element öffnen und schließen. Überprüfen Sie meinen Code unten)
< ?php // get all post types $args = array ( 'post_type' => 'post', 'post_status' => 'publish', 'pagination' => true, 'paged' => (get_query_var('paged') ? get_query_var('paged') : 1), 'posts_per_page' => 20, 'order' => 'ASC', 'orderby' => 'date', ); $my_query = new WP_Query($args); if ($my_query->have_posts()): while($my_query->have_posts()): $my_query->the_post() ?> < ---YOUR LOOP ETC--->
OK, das vermasselt den Seitenumbruch. Um dies zu beheben, müssen Sie den Parameter $max_pages
in next_posts_link
, damit Ihr next_posts_link
ähnlich aussieht
< ?php previous_posts_link(' Previous page', $my_query->max_num_pages); ?>
Dies wird Ihr Paginierungsproblem beheben