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

Woocommerce我的账户自定义标签插入短代码后查询超时内存耗尽如何解决

问题原因
  • 核心死循环问题:自定义WP_Query循环中未执行the_post()方法,无法下移文章指针,导致$query->have_posts()永远返回真,进入无限循环持续拼接字符串,最终耗尽服务器内存。
  • 无效输出缓冲:代码中声明的ob_start()和ob_get_clean()没有实际作用,整个短代码逻辑中没有向输出缓冲区写入内容,属于冗余代码。
  • 短代码重复注册:先后在全局作用域和init钩子中重复注册dashboard_student短代码,属于冗余逻辑。
  • HTML结构错误:拼接字符串时没有添加<ul>起始标签,直接拼接<li>元素,最终输出的HTML结构不合法。
  • 函数参数冗余:短代码回调函数的第三个参数$name没有使用,且默认参数设置不符合WordPress短代码回调规范。
修复方案

你原来的WooCommerce自定义标签注册代码没有问题,仅需要替换短代码部分的逻辑即可,修复后的代码如下:

function dashboard_function($atts = [], $content = null) {
    // 初始化HTML结构
    $html = '<ul>';
    // 执行自定义查询
    $query = new WP_Query([
        'post_type' => 'programma',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => 'level',
                'value' => 'programma',
                'compare' => 'LIKE'
            ]
        ]
    ]);
    // 循环遍历查询结果
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post(); // 下移文章指针,避免死循环
            $html .= '<li><a href="'. get_the_permalink() .'">'. get_the_title() .'</a></li>';
        }
    } else {
        $html .= '<li>暂无相关内容</li>';
    }
    $html .= '</ul>';
    // 重置主查询
    wp_reset_postdata();
    return $html;
}
// 仅在init钩子中注册一次短代码即可
add_action('init', function() {
    add_shortcode('dashboard_student', 'dashboard_function');
});

替换完成后进入WordPress后台→设置→固定链接,直接点击保存按钮刷新重写规则即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:00