У меня возникли проблемы с добавлением разбивки на страницы. Я использую WP_query
и хотел бы вернуть 4 сообщения на страницу. Основной запрос, похоже, работает нормально, но я должен что-то пропускать в отношении разбивки на страницы.
// The query for 4 posts $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $query = new WP_Query(); $query->query('showposts=4'.'&paged='.$paged); if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?> <div class="post"> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <p class="author">by <?php the_author(); ?></p> </div> <?php endwhile; ?> <!-- end of the loop --> <nav> <?php previous_posts_link('« Newer posts') ?> <?php next_posts_link('Older posts »') ?> </nav> <?php wp_reset_postdata(); // If no results appear else : ?> <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p> <?php endif; ?>
Я установил var для разбивки на страницы вверху как таковой:
$query->query('showposts=4'.'&paged='.$paged);
В том числе и таргетинг на страницы:
<nav> <?php previous_posts_link('« Newer posts') ?> <?php next_posts_link('Older posts »') ?> </nav>
Но я просто получаю пустой HTML <nav></nav>
– но никаких ошибок, и я не могу понять, что мне не хватает.
Изменить: согласно предложению, которое я обновил как:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_per_page' => 4, 'paged' => $paged, ); $query = new WP_Query( $args );
и обновила ссылку на кнопку:
<?php next_posts_link( 'Older posts »', $query->max_num_pages ); ?>
Я все еще не вижу ссылку для разбивки на страницы.
Пожалуйста, не используйте showposts
он заменил posts_per_page
давным-давно.
Лично я бы добавил аргументы в WP_Query
как показано ниже, дополнительно разбиение на страницы должно работать, как показано ниже:
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; $args = array( 'post_per_page' => 4, 'paged' => $paged, ); $query = new WP_Query( $args ); global $wp_query; // Put default query object in a temp variable $tmp_query = $wp_query; // Now wipe it out completely $wp_query = null; // Re-populate the global with our custom query $wp_query = $query; if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); // loop code endwhile; previous_posts_link('« Newer posts'); next_posts_link( 'Older posts »', $query->max_num_pages ); wp_reset_postdata(); else : // no post found code endif; // Restore original query object $wp_query = null; $wp_query = $tmp_query;
Что такое же Q & A Как исправить разбиение на страницы для пользовательских циклов? Я связал тебя с @ChipBennett.
Другое примечание: если это в шаблоне страницы, работающем как статическая страница, вам нужно использовать page
переменной запроса вместо paged
:
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
@ialocin, Спасибо за ваш ответ! Он решил мою проблему с небольшим редактированием кода.
if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post();
следует изменить на
if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
верный? Это то, что сработало в моем случае.
Хорошая вещь, чтобы получить значение posts_per_page из wordpress. Вы можете изменить это значение в меню wordpress admin.
$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; if(!$page) $page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1; $posts_per_page = get_option( 'posts_per_page' ); $query = new WP_Query( array( 'posts_per_page' => $posts_per_page, 'paged' => $page, 'post_status' => 'publish', 'orderby' => 'title', 'order' => 'ASC', ) ); while ( $query->have_posts() ) { $query->the_post(); // Code for Output }