2015-09-18 91 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; ?> 

我說:鏈接顯示的網址爲site/foobar/page/2/

,但顯示404頁:

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

endif;後引用this answer後。經過一些進一步的研究後,我跑過一篇文章,提到page-foobar.phpposttype-foobar.phpnames can clash以便重命名其中的一個。我將其更名爲posttype-foobar2.php,更改了我的functions.php,並進行了測試,並且仍然使用正確的網址發送到404頁面。另一篇文章提到,您必須使用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

在'wp_reset_postdata'之前加'nav'並嘗試 – 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」,其中提到我可能會創建一個雙slu slu。經過審查,我實際上是這樣做的,WordPress與雙重slu cla衝突。我決定將我的posttype-foobar.php更改爲posttype-foobar_t.php並更新了我的functions.php文件。而不是修改我的本地主機上的數據庫來修復slug問題,我決定安裝一個乾淨的安裝與修改後的更改,它的工作原理。

我還想指出我的一些發現,對於大多數提到的帖子,您必須將查詢稱爲$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; ?> 
相關問題