为主页、博客和存档页面设置帖子和内容限制
已发表: 2013-08-15在本教程中,我们将了解可用于控制档案和博客页面模板中的内容限制的内置 Genesis 设置。
我们还将考虑 WordPress 阅读设置以及它们如何影响 Genesis 设置。
除此之外,我们还将查看一些可用于进一步自定义的工作代码片段:
- 博客页面
- 档案
- 主页
- 网格循环
- 自定义帖子类型
我们将使用 StudioPress 的新 Eleven40 Pro 子主题以及 Genesis 2.0 Sample 子主题,它不包括任何开箱即用的网格循环或主页小部件。
Eleven40 Pro 主题以及其他几个 StudioPress 主题(如 Balance 主题)在 home.php 文件中包含一个自定义网格循环。
WordPress中的阅读设置
首先,让我们看看 WordPress 在阅读设置中提供的现有设置。 这些设置将影响所有存档页面上显示的帖子数量,包括:
- 博客列表页面
- 存档页面,包括作者、博客、类别、搜索和标签页面
阅读设置决定了在您的所有档案页面和主页上显示的帖子数量(如果保留如您在上面的屏幕截图中看到的默认设置)。
阅读设置不会控制您的博客页面,因为这由博客页面模板设置 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() && $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->set( 'posts_per_page', 1 ); return $query; </code></pre> }}
在主页上自定义网格循环发布限制
如果您的主题在 home.php 文件中包含网格循环,您可以简单地控制在主页上显示多少全角精选帖子和多少网格循环帖子。
最重要的是,您还可以控制特色帖子和仅在主页上的网格中显示的帖子的内容限制,因为代码包含在 home.php 文件中。
所有设置都在 home.php 文件网格循环代码中:
<?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' => 1, 'feature_image_size' => 0, 'feature_image_class' => 'alignleft post-image', 'feature_content_limit' => 0, 'grid_image_size' => 'grid-featured', 'grid_image_class' => 'grid-featured', 'grid_content_limit' => 250, 'more' => __( '[Continue reading]', 'eleven40' ), 'posts_per_page' => 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() && 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() && is_home() && 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 字限制。
您还可以添加回从 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->is_main_query() && !is_admin() && is_post_type_archive( 'your-cpt' ) ) { $query->set( 'posts_per_page', '3' ); } </code></pre> }
只需将上面代码中的 your-cpt 替换为您的自定义帖子类型的名称即可。
结论
您可以亲眼看到,使用 WordPress 钩子和过滤器在 Genesis 中也能完美运行。
类似的解决方案
- 设置在任何存档页面模板上显示条目摘录
- 设置创世纪内容存档限制的代码
- 在特定存档页面上显示完整的帖子内容或摘录
- 使用 Pre Get Posts 有条件地自定义存档页面
- 在 Genesis 中的博客页面上显示摘录并在其他档案中显示完整内容