WordPress 子、孙、曾孙类别必须使用父类别模板
WordPress child, grandchild, great grandchild categories must use parent category template
我创建了一个名为 category-south-africa.php 的模板。我希望所有子、孙、曾孙类别自动使用此模板。例如,所有这些类别都必须使用 category-south-africa.php 模板:
/category/south-africa/
/category/south-africa/stellenbosch/
/category/south-africa/stellenbosch/wine-farm/
/category/south-africa/stellenbosch/wine-farm/wine-varietal/
有人可能有 php 功能解决方案吗?
get_ancestors() 即 returns 包含任何给定类别的父项的数组。
使用类似 get_ancestors( child_category_id, 'category' );
检查值是否在数组中。如果是,则定义模板名称。
您可以为此创建自己的模板。您可以检查 category_template
过滤器并执行类似的操作。
add_filter('category_template', 'add_top_term_template');
function add_top_term_template($template) {
$term = get_queried_object();
$parent = $term->parent;
if($parent === 0) {
return $template;
}
$topLevel = null;
while($parent !== 0) {
$topLevel = get_term($parent);
$parent = $topLevel->parent;
}
$templates = ["term-top-level-{$topLevel->slug}.php"];
return locate_template($templates);
}
您可以在此处找到有关过滤器的更多信息:https://codex.wordpress.org/Plugin_API/Filter_Reference/category_template
您可以使用此功能检查当前类别是否为子类别,并将模板设置为与父类别相同的模板。将其放入主题的 functions.php。
function childcategory_template( $template ) {
$cat = get_queried_object();
if( 0 < $cat->category_parent )
$template = locate_template( 'category-south-africa.php');
return $template;
}
add_filter( 'category_template', 'childcategory_template' );
评论后编辑:您还可以检查名称(slug)并设置 $template 变量以考虑父项的名称(slug)。
function childcategory_template( $template ) {
$cat = get_queried_object();
if( 0 < $cat->category_parent )
$parent_id = $cat->category_parent;
if ( get_category( $parent_id )->slug == "south-africa" ) {
$template = locate_template( 'category-south-africa.php');
} else if ( get_category( $parent_id )->slug == "north-africa" ) {
$template = locate_template( 'category-north-africa.php');
}
return $template;
}
add_filter( 'category_template', 'childcategory_template' );
我创建了一个名为 category-south-africa.php 的模板。我希望所有子、孙、曾孙类别自动使用此模板。例如,所有这些类别都必须使用 category-south-africa.php 模板:
/category/south-africa/
/category/south-africa/stellenbosch/
/category/south-africa/stellenbosch/wine-farm/
/category/south-africa/stellenbosch/wine-farm/wine-varietal/
有人可能有 php 功能解决方案吗?
get_ancestors() 即 returns 包含任何给定类别的父项的数组。
使用类似 get_ancestors( child_category_id, 'category' );
检查值是否在数组中。如果是,则定义模板名称。
您可以为此创建自己的模板。您可以检查 category_template
过滤器并执行类似的操作。
add_filter('category_template', 'add_top_term_template');
function add_top_term_template($template) {
$term = get_queried_object();
$parent = $term->parent;
if($parent === 0) {
return $template;
}
$topLevel = null;
while($parent !== 0) {
$topLevel = get_term($parent);
$parent = $topLevel->parent;
}
$templates = ["term-top-level-{$topLevel->slug}.php"];
return locate_template($templates);
}
您可以在此处找到有关过滤器的更多信息:https://codex.wordpress.org/Plugin_API/Filter_Reference/category_template
您可以使用此功能检查当前类别是否为子类别,并将模板设置为与父类别相同的模板。将其放入主题的 functions.php。
function childcategory_template( $template ) {
$cat = get_queried_object();
if( 0 < $cat->category_parent )
$template = locate_template( 'category-south-africa.php');
return $template;
}
add_filter( 'category_template', 'childcategory_template' );
评论后编辑:您还可以检查名称(slug)并设置 $template 变量以考虑父项的名称(slug)。
function childcategory_template( $template ) {
$cat = get_queried_object();
if( 0 < $cat->category_parent )
$parent_id = $cat->category_parent;
if ( get_category( $parent_id )->slug == "south-africa" ) {
$template = locate_template( 'category-south-africa.php');
} else if ( get_category( $parent_id )->slug == "north-africa" ) {
$template = locate_template( 'category-north-africa.php');
}
return $template;
}
add_filter( 'category_template', 'childcategory_template' );