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

如何通过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设置默认值(仅针对新建画廊)

如果只需要给新创建的画廊自动加类,不影响已有内容,可以通过编辑器脚本修改区块的默认属性:

  1. 在主题目录下创建js/gallery-custom-class.js文件,内容如下:
wp.domReady(() => {
    wp.blocks.registerBlockType('core/gallery', {
        attributes: {
            className: {
                type: 'string',
                default: 'custom-class'
            }
        }
    });
});
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:25:31