国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > Wordpress > 正文

wordpress中query_posts()與WP_Query()分頁不正確

2024-09-07 00:51:00
字體:
供稿:網(wǎng)友

query_posts()與WP_Query()分頁不正確的問題困擾了我大半天,百度+谷歌數(shù)小時(shí)也無果,大多數(shù)解決方案都沒有注意到posts_per_page值過小不能覆蓋后臺(tái)閱讀中的設(shè)置,正當(dāng)要放棄的時(shí)候找到了解決辦法.

首先應(yīng)該清楚,query_posts()應(yīng)用于主循環(huán),而WP_Query()用于生成次級(jí)循環(huán).

不理解?比如,我有一個(gè)特殊的分類頁面需要指定顯示一定數(shù)量的文章,這個(gè)顯示數(shù)量與其他分類不同,不能用后臺(tái)的“設(shè)置→閱讀→博客頁面至多顯示”來統(tǒng)一設(shè)置,那么就需要給這個(gè)特殊分類寫一個(gè)模板,例如:category-wordpress-themes.php,此時(shí)需要用到query_posts()函數(shù),通過參數(shù):posts_per_page來實(shí)現(xiàn)控制顯示的文章數(shù)量.

如果只是想在邊欄等列出某分類文章列表或最新文章之類的文章列表,那么應(yīng)該使用WP_Query()函數(shù)而不是query_posts(),一個(gè)頁面應(yīng)該最多只出現(xiàn)一次主循環(huán).

按照上例所述,當(dāng)我們制作了這樣一個(gè)分類頁后,如果需要翻頁功能,就需要這樣一行代碼:

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

這是用來獲取當(dāng)前頁碼的,還需要在query_posts()中添加參數(shù)paged,代碼片段如下:

  1. $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
  2. $args = array
  3. 'posts_per_page' => 20, 
  4. 'paged' => $paged
  5. 'post_status' => 'publish'
  6. 'cat' => $cat
  7. ); 
  8. query_posts($args); 
  9. while (have_posts()) : the_post(); 
  10. echo '<li>'
  11. echo '<a href="' . get_permalink() . '">' . the_title_attribute('echo=0') . '</a>'
  12. echo '</li>'
  13. endwhile

看上去似乎沒什么問題,可以正常翻頁了,事實(shí)不然,當(dāng)我們把posts_per_page的值改為5,而后臺(tái)“設(shè)置→閱讀→博客頁面至多顯示”的值默認(rèn)是10,翻頁就會(huì)變得不正常。

雖然這樣的情況極難發(fā)生,但為了代碼更完美無錯(cuò),我們可以在function.php中添加如下代碼解決這個(gè)問題:

  1. function custom_posts_per_page($query){ 
  2. if( is_category('wordpress-themes')  && $query->is_main_query() ) { 
  3. $query->set('posts_per_page', 20); 
  4. add_action('pre_get_posts''custom_posts_per_page'); 

這里設(shè)置的posts_per_page值需與query_posts()函數(shù)中的相同,注意判斷部分,僅在我需要的分類模板中應(yīng)用,且判斷了是否為主循環(huán),否則會(huì)影響次級(jí)循環(huán)的輸出結(jié)果.

請(qǐng)注意:使用query_posts()之后必須使用wp_reset_query()重置循環(huán),否則會(huì)影響到其他循環(huán)的輸出結(jié)果,wp_reset_query()應(yīng)添加在翻頁代碼的后面.

如果你非要使用WP_Query(),同時(shí)也需要具有翻頁功能,那么就要修改你的翻頁代碼,通常翻頁代碼都封裝在一個(gè)函數(shù)內(nèi),那么就要給這個(gè)函數(shù)傳遞參數(shù),當(dāng)前對(duì)象,例如以下代碼:

  1. $args = array
  2. 'cat' => $cat
  3. 'posts_per_page' => 10, 
  4. ); 
  5. $my_query = new WP_Query($args); 
  6. while ($my_query->have_posts() ) : $my_query->the_post(); 
  7. echo '<li><a href="' . get_permalink() . '" rel="bookmark">' . the_title_attribute('echo=0') . '</a></li>'
  8. endwhile

需要將$my_query傳遞給翻頁函數(shù),替代默認(rèn)的$wp_query,使用WP_Query()之后必須使用wp_reset_postdata();重置循環(huán).

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛南县| 浦城县| 淮南市| 名山县| 凤凰县| 嘉鱼县| 思茅市| 抚州市| 桦南县| 西畴县| 兴安盟| 隆回县| 卫辉市| 海口市| 文昌市| 三门县| 团风县| 华容县| 沛县| 鞍山市| 拜泉县| 潜山县| 安顺市| 龙游县| 临夏县| 扶余县| 乌兰浩特市| 张家港市| 龙里县| 青岛市| 拜城县| 横山县| 启东市| 额济纳旗| 山西省| 沁水县| 江达县| 邯郸市| 化州市| 迁安市| 汾西县|