WordPress短代码调用acf_form时内容显示在页面顶部而非指定位置的问题求助
解决ACF短代码内容提前输出到页面顶部的问题
你猜的完全没错!问题根源就是acf_form()这个函数默认是直接输出内容,而不是把表单HTML作为字符串返回。当短代码执行时,这个函数会立刻把内容打印到页面,早于短代码所在位置的渲染,所以才会出现在顶部。
解决这个问题的关键是用PHP的输出缓冲机制,把acf_form()的输出捕获下来,再作为短代码的返回值返回。修改后的代码如下:
function op_profile_skills_func (){ // 开启输出缓冲 ob_start(); // 调用acf_form,此时输出会被缓冲捕获,不会直接打印到页面 acf_form($settings); // 获取缓冲内容并关闭缓冲 $form_html = ob_get_clean(); // 返回捕获的HTML内容 return $form_html; } add_shortcode('op_profile_skills', 'op_profile_skills_func');
补充说明:
- 之前尝试用
echo只会让问题更糟,因为短代码的回调函数需要返回内容而不是直接输出,echo同样会导致内容提前渲染。 - 输出缓冲的原理是暂时把所有输出内容存到内存里,直到你主动获取并关闭缓冲,这样就能把原本直接输出的内容转化为字符串返回,完美适配短代码的要求。
内容的提问来源于stack exchange,提问作者John Jones
相关产品推荐
相关产品推荐

