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

WordPress functions.php自定义代码无报错前端不渲染求解

故障原因
  • 核心致命问题:add_question_ad_place函数内操作$question_count时,未通过global关键字引入全局作用域的同名变量。PHP8.x环境下访问未定义的局部变量会直接抛出运行时错误中断渲染,站点关闭调试模式时前端表现为完全空白,无明确报错输出,和故障表现一致。
  • 逻辑问题:全局计数变量直接在functions.php顶层初始化,未在主循环启动时重置,若页面存在多个测验、或者后台预览/REST接口提前触发块渲染,计数会提前累加,导致广告位置错位。
  • 隐藏兼容问题:原代码末尾闭合花括号后携带不可见零宽空白字符,部分老旧PHP环境下会触发解析异常。
修复后可直接使用的代码
// 注册题目块渲染过滤器
add_filter('render_block_buzzeditor/personality-question', 'add_question_ad_place', 10, 2);
add_filter('render_block_buzzeditor/trivia-question', 'add_question_ad_place', 10, 2);

// 主循环启动时重置题目计数,避免多模块、预览场景下计数错乱
add_action('loop_start', function($wp_query) {
    if ($wp_query->is_main_query()) {
        global $question_count;
        $question_count = 1;
    }
});

function add_question_ad_place($block_content, $block)
{
    // 引入全局计数变量
    global $question_count;

    // 第2题后追加对应广告
    if($question_count === 2) {
        $block_content .= 'ad code after 2';
    }

    // 第4题后追加对应广告
    if($question_count === 4) {
        $block_content .= 'ad code after 4';
    }

    // 第6题后追加对应广告
    if($question_count === 6) {
        $block_content .= 'ad code after 6';
    }

    // 计数累加
    $question_count++;

    return $block_content;
}
验证与调整说明
  • 替换代码后清空站点OPcache、主题/插件缓存、页面静态缓存,再刷新前端验证效果,此时题目内容可正常渲染,对应题号后会追加指定广告内容。
  • 若广告出现位置不符合预期,优先检查页面非主内容区域(侧边栏、页脚、相关推荐位)是否插入了同类型题目块,这类块会被计入统计,可通过$block参数判断块所属上下文做排除。
  • 若需要调整广告展示的题号,直接修改判断条件中的数值即可;新增广告位可直接复制现有判断块,修改对应题号和广告代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:27:33