如何通过functions.php钩子为WordPress Gutenberg画廊区块添加自定义类?
给Gutenberg核心画廊区块自动添加自定义类的解决方案
你的需求完全可以通过functions.php的钩子实现,之前的代码失效是因为用错了钩子和数据结构。下面提供两种可靠的实现方式:
方法一:PHP渲染时添加(适合所有画廊,包括已有和新建)
这个方法在区块渲染到前端时动态修改类名,不管是新创建的画廊还是已有的旧画廊,都会自动加上custom-class,同时保留用户手动添加的其他类:
function add_custom_class_to_gallery_block($block_content, $block) { // 仅针对核心画廊区块 if ($block['blockName'] !== 'core/gallery') { return $block_content; } // 合并已有类和自定义类,避免重复 $existing_classes = isset($block['attrs']['className']) ? trim($block['attrs']['className']) : ''; $new_classes = $existing_classes ? "$existing_classes custom-class" : "custom-class"; // 更新区块属性并重新渲染 $block['attrs']['className'] = $new_classes; $block_content = WP_Block_Type_Registry::get_instance()->get_registered($block['blockName'])->render($block); return $block_content; } add_filter('render_block', 'add_custom_class_to_gallery_block', 10, 2);
方法二:编辑器端JS设置默认值(仅针对新建画廊)
如果只需要给新创建的画廊自动加类,不影响已有内容,可以通过编辑器脚本修改区块的默认属性:
- 在主题目录下创建
js/gallery-custom-class.js文件,内容如下:
wp.domReady(() => { wp.blocks.registerBlockType('core/gallery', { attributes: { className: { type: 'string', default: 'custom-class' } } }); });
- 在
functions.php中添加脚本加载代码:
function enqueue_gallery_custom_class_script() { wp_enqueue_script( 'gallery-custom-class', get_stylesheet_directory_uri() . '/js/gallery-custom-class.js', array('wp-blocks', 'wp-dom-ready'), wp_get_theme()->get('Version'), true ); } add_action('enqueue_block_editor_assets', 'enqueue_gallery_custom_class_script');
为什么你的原代码失效?
block_editor_settings钩子主要用于配置编辑器的全局设置,新版WordPress中该钩子返回的$settings数组已经不再包含区块的属性定义,所以无法通过它修改core/gallery的className默认值。
内容的提问来源于stack exchange,提问作者lowercase
相关产品推荐
相关产品推荐

