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

WordPress短代码输出未正确包裹内容的技术求助

解决WordPress短代码包裹get_template_part内容顺序错误的问题

这个问题我太熟了——你踩的是WordPress里get_template_part的一个常见坑:它默认直接输出内容,而不是返回字符串给变量。咱们一步步来修复:

原代码的核心问题

你写的代码里有两个关键错误:

  • get_template_part()函数不会返回模板内容,它会直接把内容输出到页面。所以你用$output= get_template_part(...)赋值的话,$output其实是null,模板内容已经提前被输出了,后面拼接的短代码自然就跑到内容下方。
  • 你调用了ob_get_clean()但没提前开启输出缓冲,这行代码根本拿不到任何有效内容。

修正后的代码

<?php
function get_products($atts = [], $content = null) {
    // 开启输出缓冲,把后续的输出暂时存到内存里
    ob_start();
    
    // 调用模板部分,此时内容不会直接输出到页面,而是存在缓冲区
    get_template_part('partials/modules/content', 'fields');
    
    // 取出缓冲区的内容,同时清空并关闭缓冲区
    $template_content = ob_get_clean();
    
    // 用目标短代码包裹模板内容,返回最终结果
    return '[shortcode]' . $template_content . '[/shortcode]';
}
add_shortcode('resources', 'get_products');

关键步骤解释

  1. ob_start():开启输出缓冲,之后所有的PHP输出(包括get_template_part加载的模板内容)都会被暂时存储在内存缓冲区,不会直接发送到浏览器。
  2. ob_get_clean():取出缓冲区里的所有内容,同时自动清空并关闭缓冲区,这样我们就能把模板内容拿到变量里自由操作。
  3. 返回包裹后的内容:短代码处理器会把你返回的内容正确输出到页面,这样短代码就能完美包裹模板内容了。

额外提示

如果你的[shortcode]本身也是一个自定义短代码(需要WordPress解析它的逻辑),记得用do_shortcode()包裹,确保它能被正确执行:

return do_shortcode('[shortcode]' . $template_content . '[/shortcode]');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:21