在最近的一个项目中,我需要一种快速的方法来直接从 WordPress 仪表板批量删除待处理和失败的 Action Scheduler 作业,因此我为此创建了一个自定义工具。
WooCommerce > Status > Tools(WooCommerce > 状态 > 工具)部分包含了很多有用的调试和维护功能,但你知道你可以在这里添加自己的自定义工具吗?
当你的网站有成千上万个不再需要的队列操作,或者插件出现故障导致大量工作卡死时,这就特别有用了。这种方法无需手动运行 SQL 查询或使用 WP CLI,只需在 WooCommerce 管理器中点击一个按钮即可。
在本教程中,我将向你展示如何使用 WooCommerce 的内置 API 注册你自己的自定义工具,以及如何触发和删除所有待处理或失败的操作。
下面是开始学习的完整片段!

PHP 代码段: 添加自定义 “工具 ”以删除动作调度失败/待处理的工作 @ WooCommerce Status
此 PHP 代码段在 WooCommerce > Status > Tools(WooCommerce > 状态 > 工具)部分添加了一个自定义工具,允许您直接从 WordPress 仪表板批量删除所有待执行的 Action Scheduler 操作。
它使用 woocommerce_debug_tools 过滤器注册了一个名为 “清理待执行操作 ”的新工具。点击 “运行 ”按钮后,回调程序会直接运行 SQL 查询,每批最多删除 10,000 行状态为 “待处理 ”的操作,如此重复,直到没有此类操作为止。
如果你的数据库中包含成千上万的卡住或过时的计划操作,会拖慢网站速度或堵塞操作调度程序队列,那么这将特别有用。
如果想删除失败的操作,只需将 SQL WHERE 子句中的 “pending ”改为 “failed ”即可。请务必更新工具的名称和描述,以便管理界面显示正确的行为。
请谨慎使用,尤其是在实时网站上,因为它会永久删除数据库条目!
add_filter( 'woocommerce_debug_tools', 'bbloomer_bulk_delete_pending_scheduled_actions' ); function bbloomer_bulk_delete_pending_scheduled_actions( $tools ) { $tools['clean_pending_actions'] = [ 'name' => 'Clean Pending Actions', 'button' => 'Run', 'desc' => 'Deletes all pending Action Scheduler actions.', 'callback' => function() { global $wpdb; $table = $wpdb->prefix . 'actionscheduler_actions'; $batch_size = 10000; $deleted = 0; do { $rows_deleted = $wpdb->query( "DELETE FROM $table WHERE status = 'pending' LIMIT $batch_size" ); $deleted += $rows_deleted; } while ( $rows_deleted > 0 ); return sprintf( 'Deleted %d pending actions.', $deleted ); } ]; return $tools; }