WordPress开发笔记

查询WordPress已注册的块模式分类的实现方法及代码

如何查询WordPress已注册的块模式分类?

数据库方法:行不通

WordPress 的块模式分类(Block Pattern Categories)并不直接存储在数据库的某个固定数据表中。它们通常是主题或插件通过代码(例如,在 functions.php 中使用 register_block_pattern_category 函数)动态注册到 WordPress 中的。

因此,你无法像查询文章或评论那样,通过直接查询某个数据库表来获取所有已注册的块模式分类。

插件方法:使用 Query Monitor 插件(推荐)

Query Monitor 是 WordPress 开发者的强大工具,它可以深入显示 WordPress 的运行状态,包括已注册的块模式分类。

  1. 安装并激活 Query Monitor 插件:你可以在 WordPress 插件库中搜索 “Query Monitor” 进行安装,或者直接从 WordPress 官方插件目录下载。
  2. 查看块模式分类:激活插件后,前端和后台的管理工具栏上会出现 Query Monitor 的菜单。点击它,在面板中寻找 “块” (Blocks)“模式” (Patterns) 相关的部分,这里可能会列出已注册的块模式分类及其详细信息。

代码方法:使用代码尝试获取(需技术背景)

既然块模式分类是动态注册的,你可以尝试在代码中访问存储这些分类的全局变量或注册表。虽然数据库中没有直接对应的表,但 WordPress 提供了相关的函数和可能的全局变量。

  • 尝试访问注册表:WordPress 可能会使用一个全局的注册表(例如 WP_Block_Pattern_Categories_Registry 类或其实例)来管理块模式分类。你可以尝试在你的主题的 functions.php 文件或其他合适的地方添加以下代码进行探查(请注意,这需要一定的 PHP 知识,并且某些内部变量可能无法直接访问):

注意:

以下代码已经通过测试,可行!

测试背景:WordPress 6.8.2版本

// 只是一种思路,并非一定有效
function zzw_debug_block_pattern_categories() {
    if ( class_exists( 'WP_Block_Pattern_Categories_Registry' ) ) {
        $registry = WP_Block_Pattern_Categories_Registry::get_instance();
        // 尝试查看 registry 的内部结构,这可能需要反射或其他调试手段
        echo '<pre>';
        // 注意:get_all_registered() 方法可能不存在,这只是示例
        // print_r( $registry->get_all_registered() ); 
        echo '</pre>';
    } else {
        echo 'WP_Block_Pattern_Categories_Registry class not found.';
    }
}
add_action( 'wp_footer', 'zzw_debug_block_pattern_categories' ); // 在页脚输出,注意前端显示
//获取到的显示结果:
Array
(
    [0] => Array //系统默认
        (
            [name] => query
            [label] => 文章
            [description] => 以列表、网格或其他布局显示您的最新文章。
        )

    [1] => Array //系统默认
        (
            [name] => videos
            [label] => 视频
            [description] => 包含视频的不同布局。
        )
    [2] => Array //自定义分类
        (
            [name] => themslug/youstyle
            [label] => 你的样式
            [description] => 你的样式,你做主
        )
     ..
)

注意:直接访问内部变量或方法可能因 WordPress 版本而异,且不适合生产环境。

块模式分类的存储机制

为了让你更清楚地理解为什么数据库查询不是最佳途径,我们来简单看一下块模式分类的典型注册和存储方式:

特性描述
注册方式通过主题或插件的 PHP 代码(如 functions.php)中的 register_block_pattern_category 函数动态注册。
存储位置不直接存储在数据库的特定表中,而是作为运行时对象或数组存在于 PHP 内存中。
持久化每次页面加载时,主题/插件代码都会重新注册这些分类。
数据库的作用WordPress 数据库(如 wp_posts, wp_term_relationships 等表)主要存储站点内容(如文章、页面、分类法)和设置,而非块模式分类的定义。
探查方法使用调试工具(如 Query Monitor)或尝试在代码中访问相关的注册表/全局变量。

总结与建议

  • 你的想法很直接,但 WordPress 的块模式分类并不直接存储在数据库的某个表中,因此无法通过 SQL 查询直接获取。
  • 强烈推荐你使用 Query Monitor 插件。它是探查 WordPress 内部状态(包括已注册的块模式分类)最直观、最安全的方式,无需直接操作数据库或编写可能不稳定的代码。
  • 如果你有开发经验,可以尝试在代码中探索相关的注册表或全局变量,但这需要一定的技术背景,且效果可能因 WordPress 版本而异。

希望这些信息和建议能帮助你更好地理解和获取已注册的块模式分类。