使用wp_delete_post删文章时出现Rank Math数据库错误的解决办法
问题:批量删除特定Meta字段文章时出现Rank Math数据库错误
我通过以下代码批量删除所有带有meta_key = xxx_generate_id的文章:
$arg = array( 'numberposts' => -1, // The number of posts to retrieve, otherwise 5 'post_type' => $publish_as, 'post_status' => $post_status, 'meta_key' => 'xxx_generate_id', ); $quesryResults = new WP_Query($arg); $success = 0; $failed = 0; if ($quesryResults->have_posts()) { while ($quesryResults->have_posts()) { $quesryResults->the_post(); if (wp_delete_post(get_the_ID(), true)) { $successs++; } else { $failed++; } } }
目标文章已成功删除,但同时触发了Rank Math插件的数据库错误,错误信息如下:
WordPress database error: [Unknown column '0' in 'field list'] UPDATE `wp_rank_math_internal_meta` SET `internal_link_count` = '0', `external_link_count` = '0', `0` = '' WHERE `object_id` = 661 WordPress database error: [Unknown column '0' in 'field list'] UPDATE `wp_rank_math_internal_meta` SET `internal_link_count` = '0', `external_link_count` = '0', `0` = '' WHERE `object_id` = 660 WordPress database error: [Unknown column '0' in 'field list'] UPDATE `wp_rank_math_internal_meta` SET `internal_link_count` = '0', `external_link_count` = '0', `0` = '' WHERE `object_id` = 652
请问如何解决或隐藏该错误?
一、修复根源问题(推荐)
该错误是Rank Math在处理文章删除事件时,内部生成的SQL语句存在逻辑错误(错误将0作为字段名执行更新操作),可按以下步骤处理:
更新Rank Math到最新版本
插件开发者大概率已修复此类BUG,先检查并升级Rank Math至官方最新版本,再重新执行删除操作验证问题是否解决。临时禁用Rank Math链接统计功能
删除文章前,暂时关闭Rank Math的链接统计模块:- 进入WordPress后台 → Rank Math → 仪表盘 → 链接统计
- 关闭内部/外部链接统计相关选项
- 执行删除代码完成后,重新开启该功能
手动清理Rank Math残留数据
若更新插件后问题仍存在,可直接清理wp_rank_math_internal_meta表中对应已删除文章的记录:DELETE FROM wp_rank_math_internal_meta WHERE object_id IN (661,660,652);注意替换表前缀
wp_为你的实际数据库前缀,以及对应的文章ID列表。
二、临时隐藏错误提示(仅应急使用)
如果只是不想看到错误输出,可在执行删除代码前后临时关闭WordPress的数据库错误显示:
// 临时关闭数据库错误显示 $wpdb->hide_errors(); // 你的删除代码(已修正拼写错误:successs → success) $arg = array( 'numberposts' => -1, 'post_type' => $publish_as, 'post_status' => $post_status, 'meta_key' => 'xxx_generate_id', ); $quesryResults = new WP_Query($arg); $success = 0; $failed = 0; if ($quesryResults->have_posts()) { while ($quesryResults->have_posts()) { $quesryResults->the_post(); if (wp_delete_post(get_the_ID(), true)) { $success++; } else { $failed++; } } } // 恢复错误显示 $wpdb->show_errors();
注意:原代码中存在拼写错误$successs++,需改为$success++才能正确统计成功删除的文章数量。
内容的提问来源于stack exchange,提问作者Herahadi An
相关产品推荐
相关产品推荐

