為主頁、博客和存檔頁面設置帖子和內容限制

已發表: 2013-08-15

在本教程中,我們將了解可用於控制檔案和博客頁面模板中的內容限制的內置 Genesis 設置。

我們還將考慮 WordPress 閱讀設置以及它們如何影響 Genesis 設置。

除此之外,我們還將查看一些可用於進一步自定義的工作代碼片段:

  1. 博客頁面
  2. 檔案
  3. 主頁
  4. 網格循環
  5. 自定義帖子類型

我們將使用 StudioPress 的新 Eleven40 Pro 子主題以及 Genesis 2.0 Sample 子主題,它不包括任何開箱即用的網格循環或主頁小部件。

Eleven40 Pro 主題以及其他幾個 StudioPress 主題(如 Balance 主題)在 home.php 文件中包含一個自定義網格循環。

WordPress中的閱讀設置

首先,讓我們看看 WordPress 在閱讀設置中提供的現有設置。 這些設置將影響所有存檔頁面上顯示的帖子數量,包括:

  • 博客列表頁面
  • 存檔頁面,包括作者、博客、類別、搜索和標籤頁面

wp閱讀設置

閱讀設置決定了在您的所有檔案頁面和主頁上顯示的帖子數量(如果保留如您在上面的屏幕截圖中看到的默認設置)。

閱讀設置不會控制您的博客頁面,因為這由博客頁面模板設置 Genesis 包含在 Genesis > Theme 設置下:

創世紀博客頁面模板

讓我們看一個例子:如果您的閱讀設置設置為顯示 5 篇文章,您的主頁和所有檔案將顯示 5 篇文章,但是您的博客頁面將顯示您設置的任何內容。

即使閱讀設置可能設置為:博客頁面最多顯示 5 個,但這僅適用於主頁,而不適用於將靜態自定義頁面與博客頁面模板一起用於自定義博客頁面的情況。

這些設置由創世博客頁面模板設置控制,如上面的屏幕截圖所示。

自定義默認主頁帖子限制

如果您希望您的檔案顯示在閱讀設置中設置的數量,但在您的主頁上顯示不同數量的帖子,您將需要在您的子主題 functions.php 文件中使用一些自定義代碼:

 add_action( 'pre_get_posts', 'change_posts_number_home_page' ); function change_posts_number_home_page( $query ) { if ($query->is_home() &amp;&amp; $query->is_main_query() ) { $query->set( 'posts_per_page', 5 ); <pre><code>return $query; } </code></pre> }

上面的代碼不會影響檔案中顯示的帖子數量。

更改檔案中顯示的帖子數量

您還可以使用此代碼更改在不同檔案(如類別和作者檔案頁面)上顯示的帖子數量,而不會影響控制其他檔案的閱讀設置:

 add_action( 'pre_get_posts', 'change_number_posts_per_category' ); function change_number_posts_per_category( $query ) { <pre><code>if ( is_category('29') ) { $query-&gt;set( 'posts_per_page', 1 ); return $query; </code></pre> }}

在主頁上自定義網格循環發布限制

如果您的主題在 home.php 文件中包含網格循環,您可以簡單地控制在主頁上顯示多少全角精選帖子和多少網格循環帖子。

最重要的是,您還可以控制特色帖子和僅在主頁上的網格中顯示的帖子的內容限制,因為代碼包含在 home.php 文件中。

所有設置都在 home.php 文件網格循環代碼中:

 &lt;?php remove_action( 'genesis_loop', 'genesis_do_loop' ); add_action( 'genesis_loop', 'eleven40_grid_loop_helper' ); /** Add support for Genesis Grid Loop */ function eleven40_grid_loop_helper() { <pre><code>if ( function_exists( 'genesis_grid_loop' ) ) { genesis_grid_loop( array( 'features' =&gt; 1, 'feature_image_size' =&gt; 0, 'feature_image_class' =&gt; 'alignleft post-image', 'feature_content_limit' =&gt; 0, 'grid_image_size' =&gt; 'grid-featured', 'grid_image_class' =&gt; 'grid-featured', 'grid_content_limit' =&gt; 250, 'more' =&gt; __( '[Continue reading]', 'eleven40' ), 'posts_per_page' =&gt; 5, ) ); } else { genesis_standard_loop(); } </code></pre> } genesis();

上面的 PHP 代碼設置為顯示 5 個帖子。 從一個特色帖子開始,它顯示完整的內容寬度和無限的內容限制,設置為 0,因此它顯示第一個帖子的完整帖子內容。

然後,它會在一個網格中顯示 4 個帖子,每個帖子的內容限制為 250 個帶有特色圖片,如果您為每個帖子上傳了一個並將其設置為特色圖片。

這些設置被閱讀設置覆蓋,這意味著如果您的閱讀設置設置為顯示 20 篇文章,那麼無論上述網格循環中的設置如何,您的主頁都會顯示。

要對此進行自定義,您可以在子主題 functions.php 文件中使用下面的 PHP 代碼來覆蓋網格循環的閱讀設置,因此使用閱讀設置來控制在所有存檔頁面上顯示的帖子數。

更改網格循環帖子限制

add_action( 'pre_get_posts', 'change_num_posts_in_grid' ); function change_num_posts_in_grid( $query ) { global $wp_the_query; if( $query->is_main_query() &amp;&amp; is_home() ) { $query->set( 'posts_per_page', '5' ); } }

上面的代碼也可以修改為使用網格循環在任何其他頁面上工作,只需將代碼中的條件標記從 is_home() 更改為其他內容。

主頁子頁面

如果您還想控製網格或標準摘錄的子頁面上顯示的帖子數量,可以使用如下代碼:

 add_action( 'pre_get_posts', 'change_num_posts_in_grid' ); function change_num_posts_in_grid( $query ) { global $wp_the_query; if( $query->is_main_query() &amp;&amp; is_home() &amp;&amp; is_paged() ) { $query->set( 'posts_per_page', '5' ); } }
注意:如果您的主頁使用網格,這些子頁面檔案也將顯示在網格中。

了解更多關於將 Genesis Grid Loop 用於不同的 Home Post 佈局的信息。

更改特定類別的內容限制

您還可以覆蓋 WordPress 閱讀設置並自定義任何存檔的摘錄限制,包括您的主頁、作者、博客、類別、搜索和標籤頁存檔。

 add_filter('excerpt_length', 'specific_category_excerpt_length'); function specific_category_excerpt_length($length) { if(is_category('29') ) { return 20; } }

上面的代碼會將 id 為 29 的類別頁面上的摘錄長度更改為 20 字限制。

注意:上述代碼僅在您設置了 Genesis > Theme Settings > Content Archives > Display Post Excerpts 時有效,如果您使用 Display Post Content 設置,則該代碼無效。

內容檔案 - 顯示帖子摘錄

您還可以添加回從 WordPress 摘錄中剝離的 HTML 格式標記。

最重要的是,您可以使用下面的代碼來控制特定檔案中摘錄的內容限制,然後還可以設置其他人以顯示設定的限制。 注意:您的 Genesis > Theme Settings > Content Archives 必須設置為顯示摘錄而不是內容限制。

 add_filter('excerpt_length', 'specific_category_excerpt_length'); function specific_category_excerpt_length($length) { if(in_category('web-design') ) { return 20; } else { return 500; } }

上面的代碼顯示網頁設計類別中摘錄的內容限制為 20,所有其他檔案顯示限制為 500。

這是一些 PHP 代碼,其中包含多個類別的數組:

 add_filter('excerpt_length', 'specific_category_excerpt_length'); function specific_category_excerpt_length($length) { if(in_category(array( 153,154,156 ) ) ) { return 100; } else { return 300; } }

此代碼使用類別 ID,並顯示 3 個類別的內容限制為 100。 所有其他檔案顯示的限制為 300。

了解有關自定義摘錄的更多信息。

自定義帖子類型 (CPT)

這是確定在 CPT 的存檔頁面上顯示自定義帖子類型的帖子數量的代碼:

 add_action( 'pre_get_posts', 'cpt_archive_items_limit' ); function cpt_archive_items_limit( $query ) { <pre><code>if( $query-&gt;is_main_query() &amp;&amp; !is_admin() &amp;&amp; is_post_type_archive( 'your-cpt' ) ) { $query-&gt;set( 'posts_per_page', '3' ); } </code></pre> }

只需將上面代碼中的 your-cpt 替換為您的自定義帖子類型的名稱即可。

結論

您可以親眼看到,使用 WordPress 鉤子和過濾器在 Genesis 中也能完美運行。

類似的解決方案

  • 設置在任何存檔頁面模板上顯示條目摘錄
  • 設置創世紀內容存檔限制的代碼
  • 在特定存檔頁面上顯示完整的帖子內容或摘錄
  • 使用 Pre Get Posts 有條件地自定義存檔頁面
  • 在 Genesis 中的博客頁面上顯示摘錄並在其他檔案中顯示完整內容