我在WordPress中有一个父类别页面, 该页面在其下方显示一个帖子和四个子类别。四个子类别页面将共享相同的HTML和逻辑, 但与父类别不同。父类别使用category.php和category.twig来处理其HTML和内容的显示。请参见下面的代码。我如何告诉WordPress和Timber为父类别(子弹:故事)的子代使用category-child.php和category-child.twig(示例名称)。我知道我可以为每个子段符或ID使用category-slug.php或category-id.php, 但这需要将相同的代码添加到四个(或更多)不同的PHP和Twig文件中, 这并不理想。
category.php
/**
* @packageWordPress
* @subpackagegerryfeehan
* @since1.0.0
*/$templates = array( 'category.twig', 'index.twig' );
$context = Timber::context();
$args = array(
'cat' =>
'7, 5, 3, 4, 6', 'numberposts' =>
1, 'orderby' =>
'date', 'order' =>
'DESC', );
$context['stories'] = Timber::get_posts($args);
$context['categories'] = Timber::get_terms('category');
$categories = get_categories(
array(
'hide_empty' =>
'0', 'parent'=>
7, 'orderby'=>
'id', 'order'=>
'ASC'
)
);
// $context['categories'] = $categories;
// Updated code with suggestions from Tomek$category = get_queried_object();
// will give you current WP_Termif( $category->
parent == 0 ) {
// parent category
$templates = array( 'category.twig' );
$context['categories'] = $categories;
} else {
// child category
$templates = array( 'category-map.twig' );
$context['categories'] = $categories;
}// Timber::render( array( 'category.twig', 'index.twig' ), $context );
Timber::render( $templates, $context );
category.twig
{% extends "base.twig" %}{% block content %}
<
section class="stories">
<
h2>
Stories<
/h2>
{% for story in stories %}
<
article class="story" id="story-{{ story.ID }}">
{% if story.thumbnail.src %}
<
figure>
<
img src="http://img.readke.com/220528/0926355Z3-0.jpg story.thumbnail.src }}" class="" alt="{{ story.thumbnail.alt }}" />
{% if story.thumbnail.caption %}
<
figcaption>
{{ story.thumbnail.caption }}<
/figcaption>
{% endif %}
<
/figure>
{% endif %}
<
h3 class="story__heading">
<
a href="/uploads/allimg/220528/0926355Z3-0.jpg story.link }}">
{{ story.title }}
<
/a>
<
/h3>
<
div class="story__meta">
<
time class="">
{{ story.date }}<
/time>
<
/div>
<
div class="story__content">
{{ story.preview.read_more(false) }}
<
/div>
<
/article>
{% endfor %}
<
/section>
{% if function(cat_is_ancestor_of(7, 5)) %}yolo{% endif %}
{% for category in categories %}
<
div class="category">
<
figure>
<
figcaption>
{{ category.name }}
<
/figcaption>
{{ category.description }}
<
/figure>
<
/div>
{% endfor %}
{% endblock %}
可以将以下代码添加到archive.php文件中, 但是我不确定如何将其扩展以满足我的需求。
else if ( is_category() ) {
$term = new Timber\Term( get_queried_object_id() );
$context['term']= $term;
$context['title'] = single_cat_title( '', false );
array_unshift( $templates, 'archive-' . $term->
slug . '.twig' );
}
完整的父级和子级类别结构
父母:故事孩子:美国, 加拿大, 美国和世界露营。
有任何想法吗?
#1作为解决方案, 你可以为子类别创建模板文件, 并通过functions.php包含模板
循序渐进
创建你的模板文件, 例如template-sub-category.php
将代码添加到你的functions.php
add_filter( 'template_include', 'your_prefix_set_template', 10, 1 );
function your_prefix_set_template( $template_path ) {
if ( ! is_category() ) {
return $template_path;
}$parent_category = get_term_by( 'slug', 'stories', 'category' );
// parent categoryif ( empty( $parent_category ) ) {
return $template_path;
}$term = get_queried_object();
if ( $term->
parent !== $parent_category->
term_id ) { // check if is the parent category
return $template_path;
}return locate_template( 'template-sub-category.php' );
}
#2将逻辑保留在category.php中。添加类似以下内容(sudo代码):
$ category = get_queried_object(); //将为你提供当前的WP_Term
if($ category-> parent == 0){
// parent category
$templates = array( 'parent-category.twig' );
$context['dataForParentCategory'] = array( ... );
}其他{
// child category
$templates = array( 'child-category.twig' );
$context['dataForChildCategory'] = array( ... );
}
【对子类别使用不同的模板】Timber :: render($ templates, $ context);
推荐阅读
- 将WP更新到Salient主题中的5.0.2之后,使用Classic Visual Composer代码
- 在WordPress自定义帖子类型循环中将ACF分类字段用作变量
- 更新特定acf_form()时更新帖子的分类法
- 无限的自定义字段WordPress
- 独特功能图片作为wordpress中每页的标题图片
- Understrap WordPress入门主题
- 将主题移至Web服务器后出现未定义的函数错误
- 02django 框架ORM 操作数据库,字段的增删改查
- ssh配置临时反向代理