添加自定义短代码后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
相关产品推荐
相关产品推荐

