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

ACF Blocks字段无法在header.php调用输出,MU插件是否有影响?

问题分析与解决方案
  • MU插件不是导致你拿不到字段的原因,无需纠结这点。

  • 为什么header里无法获取ACF Blocks字段?
    ACF Blocks的字段并非存储在文章元数据(post meta)中,而是作为Gutenberg块的一部分,嵌套存储在文章的post_content里。你之前用的have_rows('block_faq')是读取常规绑定到文章类型的ACF字段组的方法,没法直接读取块内的字段;再加上header.php执行时,Gutenberg块还未被解析,自然拿不到数据。

  • 正确的获取方法
    你需要先解析当前文章内容,提取出对应的ACF Block,再读取里面的字段。可以用WordPress原生的parse_blocks函数实现,以下是适配你需求的代码示例:

直接替换header.php中的代码

<?php
global $post;
if (is_singular()) { // 仅在单页面/单文章页面执行
    $blocks = parse_blocks($post->post_content);
    foreach ($blocks as $block) {
        // 替换成你实际注册的ACF Block名称(注册时的name参数,格式通常为acf/xxx)
        if ($block['blockName'] === 'acf/block-faq') {
            $faq_data = $block['attrs']['data'];
            // 输出字段内容
            if (!empty($faq_data['question'])) {
                echo $faq_data['question'];
            }
            if (!empty($faq_data['answer'])) {
                echo $faq_data['answer'];
            }
        }
    }
}
?>

更稳妥的Schema输出方式(推荐在MU插件中添加)

如果你的目标是输出FAQ Schema,建议把逻辑放到wp_head钩子中执行,比直接写在header.php里更灵活:

add_action('wp_head', 'output_faq_schema_from_acf_block');
function output_faq_schema_from_acf_block() {
    global $post;
    if (!is_singular() || empty($post)) return;
    
    $blocks = parse_blocks($post->post_content);
    $faq_items = [];
    foreach ($blocks as $block) {
        if ($block['blockName'] === 'acf/block-faq') {
            $data = $block['attrs']['data'];
            $faq_items[] = [
                '@type' => 'Question',
                'name' => $data['question'],
                'acceptedAnswer' => [
                    '@type' => 'Answer',
                    'text' => $data['answer']
                ]
            ];
        }
    }
    
    if (!empty($faq_items)) {
        $schema = [
            '@context' => 'https://schema.org',
            '@type' => 'FAQPage',
            'mainEntity' => $faq_items
        ];
        echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
    }
}
  • 注意事项
    1. 务必把代码中的acf/block-faq替换成你注册ACF Block时填写的name参数;
    2. 如果Block内使用了重复字段(Repeater),需要在循环中嵌套处理子字段;
    3. 确保页面中确实添加了该ACF Block,且字段已填写内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:53:02