You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:50:08