我有一个有以下文章结构的网站。它工作并使用archive.php模板,就像它应该使用的那样
website.com/category/articles/arrester/?tag=online-lectures
这也适用于使用标签在线-lectures.php,就像它应该使用的那样
Website.com/tag/联机-讲座/
现在,这是行不通的--从某种意义上说,它显示所有带有“在线讲座”标签的文章,只显示id 7类别中带有此标记的文章,但是它使用的是archive.php模板,而不是像我想象的那样使用标签-online-lectures.php。
Website.com/tag/在线-讲座/?cat=7
为什么?
发布于 2023-04-20 17:01:09
为什么?
这是因为漂亮的permalink:
/tag/online-lectures/?cat=7获取转换为丑陋的permalink:
index.php?tag=online-lectures&cat=7正如您所看到的,/tag/online-lectures部分不再像以前那样强调了。毕竟,/category/arrester?tag=online-lectures会归结为完全相同的丑陋URL。
由于结果查询是一个归档文件,而且可用的最具体的模板是archive.php,所以它选择了该模板。
记住,决定加载哪个模板的不是URL,而是主查询。URL从/ index.php?ugly=style /style/permalinks转换为,然后使用该URL创建查询参数,这些参数被放入主查询中,用于获取帖子。之后,WP使用主查询对象在模板层次结构中运行并选择要加载的模板。
您的假设可能是错误的,但这并不意味着您不能使用您期望的模板。这意味着您需要一个过滤器来识别这种情况,并使用template_include加载一个不同的模板。
例如,如果我们将natalia.php放在?natalia=1中,那么我们将从主题请求D12:
add_filter( 'template_include', 'natalia_template' );
function natalia_template( $template ) {
if ( isset( $_GET['natalia` ) ) {
return 'natalia.php';
}
return $template;
}您可以使用类似的筛选器检查查询变量,并选择您喜欢的模板。
发布于 2023-04-20 16:14:54
如果希望对特定类别中的所有标记存档使用tag-online-lectures.php模板,而不管类别ID如何,则可以修改tag.php模板以检查当前标记存档是否在所需类别中,如果是,则包括tag-online-lectures.php模板。
下面是一个如何修改tag.php模板以实现此目的的示例:
term_id, 'category', array( 'fields' => 'ids' ) );
// Check if the tag is assigned to a category with the desired slug
if ( in_array( 'articles', $categories ) ) {
// Include the tag-online-lectures.php template
get_template_part( 'tag-online-lectures' );
} else {
// Include the default tag.php template
get_template_part( 'archive', 'tag' );
}https://wordpress.stackexchange.com/questions/415493
复制相似问题