2015-09-18 4 views
2

Изучал вопрос разбивки на страницы, который у меня есть с WordPress. Мой page-foobar.php файл:Почему next_post_link() не работает с WP_Query?

<?php 
// the query 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'ignore_sticky_posts' => true,); 
$foo_query = new WP_Query($foobar_args); 
if ($foo_query->have_posts()) : ?> 
    <?php while ($foo_query->have_posts()) : $foo_query->the_post();?> 
     // code 
    <?php endwhile; ?> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?> 

Я добавил:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$foo_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$foo_query->max_num_pages); ?> 
</nav> 

после ссылки this answer после endif;:

Ссылка показывает в URL, как site/foobar/page/2/ но отображает страницу 404. После некоторых дальнейших исследований я просмотрел статью, в которой упоминались page-foobar.php и posttype-foobar.phpnames can clash, чтобы переименовать одну из них. Я переименовал posttype-foobar2.php, изменил мой functions.php, протестировал и по-прежнему отправил на страницу 404 с правильным URL-адресом. Другая статья упоминается, что вы должны использовать wp_query() поэтому я изменил мой page-foobar.php на:

<?php 
// the query 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'ignore_sticky_posts' => true,); 
$wp_query = new WP_Query($foobar_args); 
if ($wp_query->have_posts()) : ?> 
    <?php while ($wp_query->have_posts()) : $wp_query->the_post();?> 
     // code 
    <?php endwhile; ?> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?> 

пагинация:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
</nav> 

Я сделал тест, добавив это до <?php wp_reset_postdata(); ?> и после <?php endwhile; ?>:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
</nav> 

, и я по-прежнему получаю сообщение на странице 404. Когда я меняю next_posts_link() на <?php var_dump(next_posts_link('&laquo; Older Entries', $wp_query->max_num_pages)); ?>, он возвращает NULL. Если я изменю next_posts_link() на get_next_posts_link(), я получаю string(99). Что я делаю неправильно с моим разбиением на страницы?

Далее Реферировано:

Как правильно получить свою нумерацию страниц, чтобы перейти к следующей странице?

+0

Добавьте 'nav' перед' wp_reset_postdata' и попробуйте – Karthik

+0

Я попробовал это и все еще получаю ошибку. Я отредактирую свой вопрос –

+0

Эти функции должны выполняться внутри цикла (т. Е. Где '// code'). – rnevius

ответ

0

После ряда дальнейших исследований я столкнулся с решением проблемы и надеюсь, что это поможет кому-то другому. Ответ, представленный Sindhu действительно заслуживают внимания в отношении добавления:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

и модификации аргументов:

$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'paged' => $paged); 

Кодекс для get_query_var(). После внесения дополнительных изменений он все еще не работал, поэтому я начал тестировать свои постоянные ссылки. Когда я запустил код под Default, постраничная разбивка. Когда я изменил на Post name и сохранил дважды, он все равно не работал. После просмотра я решил найти custom post type giving 404 error, и я наткнулся на «Fixing Custom Post Type 404 Errors In WordPress», в котором упоминалось, что я могу создать двойной слизень. После обзора я действительно делал это, и WordPress столкнулся с двойной пулей. Я решил изменить свой posttype-foobar.php на posttype-foobar_t.php и обновил файл functions.php.Вместо того, чтобы модифицировать базу данных на моем локальном хосте для исправления проблемы с выпуском, я решил установить чистую установку с измененными изменениями, и она работает.

Я также хотел бы указать на некоторые из моих выводов в отношении большого количества сообщений, упомянутых вами, что вы должны вызвать запрос как $wp_query = new WP_Query($foobar_args);.

1
// the query 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'paged' => $paged); 
$wp_query = new WP_Query($foobar_args); 
if ($wp_query->have_posts()) : ?> 
    <?php while ($wp_query->have_posts()) : $wp_query->the_post();?> 
      <?php the_title(); echo "<br/>"; ?> 
    <?php endwhile; ?> 
    <nav> 
     <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
     <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
    </nav> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?> 
Смежные вопросы