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

如何在WordPress Gutenberg编辑器预览切换时为根容器添加自定义类

Gutenberg编辑器预览模式响应式类名注入优化方案

你不需要给每个区块都加类,直接监听预览模式变化,给.is-root-container根容器动态追加类即可,性能远高于原区块过滤器方案,代码如下:

import htm from 'https://unpkg.com/htm?module'
const html = htm.bind(wp.element.createElement);

const { useSelect } = wp.data;
const { render } = wp.element;

// 缓存上一次的预览模式,避免重复操作DOM
let lastPreviewMode = null;

// 监听编辑器状态变化
wp.data.subscribe(() => {
  // 获取当前预览设备类型
  const currentMode = wp.data.select('core/edit-post').__experimentalGetPreviewDeviceType().toLowerCase();
  // 仅在模式变化时更新类名
  if (currentMode === lastPreviewMode) return;
  lastPreviewMode = currentMode;

  // 选中根容器
  const rootContainer = document.querySelector('.is-root-container');
  if (!rootContainer) return;

  // 移除旧的设备类名
  rootContainer.classList.remove('mobile', 'tablet', 'desktop');
  // 追加新的类名 可按需求自定义类名规则
  if (currentMode === 'desktop') {
    rootContainer.classList.add('desktop', 'tablet');
  } else {
    rootContainer.classList.add(currentMode);
  }
  rootContainer.classList.add('tw');
});

该方案优势:

  • 全局仅运行一次监听逻辑,不受区块数量影响,无额外渲染开销
  • 类名直接挂载在根容器上,和前端生产环境的响应式结构完全一致,样式继承逻辑更直观

编辑器内样式适配参考:

/* 响应式样式示例 */
.is-root-container.mobile .wp-block-paragraph {
  font-size: 14px;
  padding: 0 12px;
}
.is-root-container.tablet .wp-block-paragraph {
  font-size: 16px;
  padding: 0 24px;
}
.is-root-container.desktop .wp-block-paragraph {
  font-size: 18px;
  padding: 0 48px;
}

注:当前使用的__experimentalGetPreviewDeviceType为实验性API,WordPress 6.0+版本均稳定支持,后续API正式化后仅需替换对应调用字段,核心逻辑无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:54:04