我目前正在尝试做一个目录风格的网站,我目前有父类别和子类别。
现在,我已经显示了父类别,当单击父类别链接时,我正在使用category.php
显示子类别列表。
现在我想知道,当点击子类别链接时,WordPress会显示该子类别中的所有帖子。
是否有条件语句或方法可以让子类别转到archive.php
所以它可以显示其他内容?
现在,父类别和子类别从category.php
, 所以它们最终是同一页。
我目前正在尝试做一个目录风格的网站,我目前有父类别和子类别。
现在,我已经显示了父类别,当单击父类别链接时,我正在使用category.php
显示子类别列表。
现在我想知道,当点击子类别链接时,WordPress会显示该子类别中的所有帖子。
是否有条件语句或方法可以让子类别转到archive.php
所以它可以显示其他内容?
现在,父类别和子类别从category.php
, 所以它们最终是同一页。
有两种方法可以做到这一点。
通过检查类别/子类别的深度。如果我们正在浏览主/父类别,则显示自定义模板;如果我们在子类别上,则显示另一个模板,然后继续category.php 模板您应该使用哪种方法取决于您的项目要求。在这里,我将解释第一个,因为它非常灵活,我认为会适合您的目的。
WordPress拥有template_include
在WordPress之前立即执行的函数包括预定的模板文件。这可以用来覆盖WordPress的默认模板行为。
function wpse_template_check( $template ) {
if ( is_category() ) {
// Get category information
$cat = get_query_var( \'cat\' );
$cats_str = get_category_parents( $cat, false, \'%#%\' );
$cats_array = explode(\'%#%\', $cats_str);
$cat_depth = sizeof( $cats_array )-2;
// Check category depth
$new_template = locate_template( array( \'category-custom-template.php\' ) );
if ( $cat_depth == 0 && \'\' != $new_template ) {
return $new_template;
}
}
return $template;
}
add_filter( \'template_include\', \'wpse_template_check\' );
此函数计算类别深度并检查当前类别是否为主/父类别。如果为true且类别模板存在,则将类别模板替换为category-custom-template.php
.我已经测试了它,它正在工作,但您应该注意,它是基于类别深度的,所以所有父类别都将具有相同的自定义模板。
尽管您可以自定义此功能以执行更多操作并满足您的需求。
我想我明白你的意思了。默认情况下,单击类别并将您定向到类别页面时,将显示当前类别及其所有子类别中的帖子
这是默认情况下构建类别页面的方式。主查询(也使用WP_Query
) 使用tax_query
从db调用类别和分类归档页面上的帖子。A.tax_query
在分类页面和分类页面上完全相同,实际上内置分类之间没有区别category
和自定义分类法。看见this post 以获取解释。
默认情况下,如果您查看tax_query
, 这个include_children
参数设置为true,这意味着还包括所查询的当前术语的子术语。所以,基本上只需要将此参数设置为false。要实现这一点,您需要使用parse_tax_query
滤器
您可以在函数中简单地执行类似的操作。php文件(需要php 5.3+)
add_filter( \'parse_tax_query\', function ( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_category() ) {
$query->tax_query->queries[0][\'include_children\'] = 0;
}
}
这将确保在单击某个类别时,它只显示该特定类别中的帖子,而不显示其子类别中的帖子我已经创建了一个博客插件。我的博客中有博客类别。我想获得所有博客类别的列表,并将其列在我的www.domain中。com/blogs/page。我的博客类别名称为“blogcategory”。我不知道如何在list-category 作用我是wordpress开发的nooby。