WordPress 文章不分頁顯示全部,不使用WP_Query(),使用pre_get_posts

不限制顯示文章筆數(文章不分頁)

在自訂頁面上顯示所有文章,我們可以用 WP_Query()  輕易達成, 在 posts_per_page 參數設為 -1 即可,但有時我們需要在主題頁面上顯示所有文章,但又不想再跟資料庫要一次資料,多少會影響效能,或是開發插件,並不會去動到主題,所以就沒辦法使用 WP_Query()  ,所以可以改使用 pre_get_posts  這個鉤子,去修改Main Query 參數,下方針對兩種方法作介紹。

使用 WP_Query()

 
<?php

$args = array(
	'cat'=>array(6),
	'post_status' => 'publish', 
	'ignore_sticky_posts' => 0,
	'posts_per_page' => -1,
	'paged' => 1
);
// The Query
$the_query = new WP_Query( $args );

?>

pre_get_posts_fun

使用這個鉤子,要把下列代碼,貼至主題根目錄下的 functions.php 檔案中

其中 if () 用於判斷就是不分頁,顯示所有文章的頁面

例如:

  • is_home() 即在首頁執行
  • !is_admin() 則醭在後台執行
  • 依此類推

若沒有設定 if() 的條件,就會全站都不分頁喔

<?php

add_action( 'pre_get_posts', 'pre_get_posts_fun' );

function pre_get_posts_fun( $query ) {

	if( $query->is_main_query() && !is_admin() && is_home() ) {

		$query->set( 'posts_per_page', '-1' );

    }

}

?>

參考:

https://wordpress.stackexchange.com/questions/36160/posts-per-page-no-limit

pre_get_posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料