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
相关产品推荐
相关产品推荐

