WordPress 6:templates/category.html引用模式中获取分类ID失败求助
解决WordPress主题模式中无法获取当前分类ID的问题
问题描述
创建块主题后,目录结构包含themes/orgcms/patterns/category-sidebar.php和themes/orgcms/templates/category.html,在category.html中引用了orgcms/category-sidebar模式,但在模式的PHP代码里,使用get_queried_object()和get_query_var('cat')均返回NULL。
解决方案
1. 通过全局$wp_query获取查询上下文
Block Pattern的PHP代码可能在非主查询上下文执行,直接调用全局$wp_query对象获取当前分类数据:
<?php /** * Title: Category's Sidebar * Slug: orgcms/category-sidebar */ global $wp_query; $current_category = $wp_query->get_queried_object(); var_dump($current_category); ?>
若仅需分类ID,可简化为:
$category_id = $wp_query->get_queried_object_id(); var_dump($category_id);
2. 确认模板合规性
确保templates/category.html符合WordPress块主题规范:文件名正确(category.html默认适配所有分类归档,特定分类可使用category-{slug}.html或category-{id}.html),且WordPress已正确识别该模板作为分类归档的渲染文件。
3. 清除缓存
若使用了缓存插件或WordPress内置缓存,清除缓存后重新加载分类页面,避免旧缓存导致的上下文丢失问题。
4. 手动注册模式(可选)
虽然WordPress会自动加载patterns目录下的PHP文件,但手动注册模式可确保上下文传递更可靠,在主题functions.php中添加:
function orgcms_register_patterns() { register_block_pattern( 'orgcms/category-sidebar', array( 'title' => __('Category\'s Sidebar', 'orgcms'), 'content' => file_get_contents(get_template_directory() . '/patterns/category-sidebar.php'), 'description' => __('Sidebar for category archives', 'orgcms'), 'categories' => ['widgets'], ) ); } add_action('init', 'orgcms_register_patterns');
内容的提问来源于stack exchange,提问作者WisdomFusion
相关产品推荐
相关产品推荐

