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

添加自定义短代码后WordPress页面更新报错求助

解决WordPress后台更新时“Cannot modify header information”报错

错误原因

你的自定义短代码直接输出了HTML内容,而WordPress执行后台更新操作时,需要先发送HTTP头信息(比如页面跳转、会话Cookie更新)。但短代码在头信息发送前就输出了内容(对应functions.php第38行的HTML输出),导致系统无法再修改头信息,从而触发这些警告。

修复方案

WordPress短代码要求返回内容而非直接输出。你需要使用输出缓冲(Output Buffering)捕获所有HTML内容,最后返回捕获的内容。

修改后的代码如下:

add_shortcode( 'holiday-taxonomy', 'wpc_shortcode_holiday_taxonomy' );
function wpc_shortcode_holiday_taxonomy(){
    ob_start(); // 开启输出缓冲
    ?>
    <section class="holidays__categories">
        <ul class="holidays__categories-list">
            <?php
            $terms = get_terms([
                'taxonomy'   => 'holidays_category',
                'hide_empty' => false,
            ]);
            // 检查分类项是否存在且无错误
            if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
                foreach ($terms as $term) :
                    $image_url = get_field('featured_image', $term->taxonomy . '_' . $term->term_id);
                    ?>
                    <li class="holidays__categories-item" style="background-image: url('<?= esc_url($image_url); ?>')">
                        <a class="button-yellow" href="<?= esc_url(get_term_link((int)$term->term_id)); ?>"><?= esc_html($term->name); ?></a>
                    </li>
                <?php
                endforeach;
            } else {
                echo '<li>No categories found.</li>';
            }
            ?>
        </ul>
    </section>
    <?php
    return ob_get_clean(); // 返回缓冲的内容并关闭缓冲
}

额外优化说明

  • 添加esc_url()和esc_html()对输出内容转义,避免XSS安全漏洞,同时符合WordPress编码规范。
  • 增加了get_terms()返回值的判断,避免无分类项时出现空列表,提升页面友好性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:26