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

如何解析WordPress小工具区域内插入的区块内容?

核心问题原因

dynamic_sidebar() 输出的是小工具渲染完成的最终HTML代码,而 parse_blocks() 仅能识别包含WordPress原生区块注释标记(形如<!-- wp:xxx -->)的原始未渲染内容,因此直接拿渲染后的HTML解析必然无法得到预期的区块结构。

可行实现方案

WordPress 5.8版本上线区块小工具编辑器后,所有区块类型的小工具原始内容都会存储在站点options表的widget_widget_block字段中,我们可以直接提取该原始内容再调用parse_blocks()解析,示例代码如下:

// 获取所有侧边栏的小工具配置
$all_sidebars = wp_get_sidebars_widgets();
// 替换为目标侧边栏ID,示例为sidebar-1
$target_sidebar_id = 'sidebar-1';
$target_widget_list = $all_sidebars[$target_sidebar_id] ?? [];

// 获取所有区块小工具的原始配置
$block_widget_config = get_option( 'widget_widget_block', [] );
$parsed_sidebar_blocks = [];

foreach ( $target_widget_list as $widget_id ) {
    // 筛选区块类型的小工具,适配低版本PHP可用strpos($widget_id, 'widget_block-') === 0替代str_starts_with
    if ( str_starts_with( $widget_id, 'widget_block-' ) ) {
        $instance_id = (int) substr( $widget_id, 13 );
        if ( isset( $block_widget_config[$instance_id]['content'] ) ) {
            // 解析原始区块内容
            $blocks = parse_blocks( $block_widget_config[$instance_id]['content'] );
            $parsed_sidebar_blocks = array_merge( $parsed_sidebar_blocks, $blocks );
        }
    }
}

// $parsed_sidebar_blocks 即为侧边栏内所有区块的解析结果

注意事项

  • 该方案仅适用于WordPress 5.8及以上版本
  • 若侧边栏中包含传统非区块类型的小工具,这部分内容无法通过该方法解析,仍需通过dynamic_sidebar()渲染获取输出

内容的提问来源于stack exchange,提问作者Thirumani guhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:08