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

如何在特定ACF块启用时用PHP为body标签添加onload事件

实现仅当页面包含特定ACF块时为body添加onload属性

你的需求是只有当页面用到带Google Map的ACF块时,才给<body>标签加上onload="initialize()"属性,下面是修正后的可行方案,同时解释下你原代码失效的原因:

修正后的完整代码

1. 正确检测ACF块是否存在(支持嵌套块)

ACF块的blockName格式是acf/[你的块slug],比如你块的slug是google-map,那对应名称就是acf/google-map。下面的函数会检测顶层和嵌套的目标块:

function has_acf_block($block_slug) {
    $post = get_post();
    // 先判断是否存在文章内容,以及是否包含块
    if (!$post || !has_blocks($post->post_content)) {
        return false;
    }

    $blocks = parse_blocks($post->post_content);
    $target_block = 'acf/' . $block_slug;

    foreach ($blocks as $block) {
        // 检查当前顶层块
        if ($block['blockName'] === $target_block) {
            return true;
        }
        // 检查嵌套的子块
        if (!empty($block['innerBlocks'])) {
            foreach ($block['innerBlocks'] as $inner_block) {
                if ($inner_block['blockName'] === $target_block) {
                    return true;
                }
            }
        }
    }
    return false;
}

2. 给body添加onload属性

使用WordPress的body_attr钩子(5.8及以上版本支持)来修改body标签的属性:

function add_map_onload_to_body($attrs) {
    // 替换成你的ACF块slug,比如'google-map'
    if (has_acf_block('google-map')) {
        $attrs['onload'] = 'initialize()';
    }
    return $attrs;
}
add_filter('body_attr', 'add_map_onload_to_body');

兼容旧版WordPress的方案

如果你的WordPress版本低于5.8,body_attr钩子不存在,可以改用wp_body_open钩子添加初始化脚本,效果和onload属性一致:

function load_map_initialization_script() {
    if (has_acf_block('google-map')) {
        echo '<script>window.addEventListener("load", initialize);</script>';
    }
}
add_action('wp_body_open', 'load_map_initialization_script');

原代码失效的原因

  1. 未处理嵌套块:如果你的ACF块被放在其他块(比如列块、组块)里面,原函数只会遍历顶层块,找不到目标块。
  2. blockName格式错误:你传入的block_handle可能没带acf/前缀,ACF块的名称默认是acf/[slug],单纯传slug会匹配失败。
  3. 未判断$post是否存在:在非单页(比如归档、404页面),get_post()会返回null,导致函数直接报错或返回false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:35:12