WP-CLI:用于删除订单的命令链 - 位置参数错误太多

WP-CLI: Command chaining for deleting orders - Too many positional arguments error

在克隆和翻译 WordPress 网站时,我想使用 WP-CLI 删除所有订单,如下所示:wp wc shop_order delete $(wp wc shop_order list --user=4 --field=id) --user=4。不幸的是,我收到错误 太多位置参数

完整示例:

wp wc shop_order delete $(wp wc shop_order list --user=4 --field=id) --user=4


Error: Too many positional arguments: 63537 63536 63534 63533 63532 63531 63527 63525
63524 63522 63521 63515 63507 63504 63503 63502 63501 63500 63499 63497 63496 63495 63494 
63493 63492 63491 63483 63482 63479 63430 63429 63428 63427 63425 63423 63422 63421 63420 
63415 63414 63412 63411 63410 63408 63407 63406 63405 63404 63403 63402 63401 63400 63399 
63398 63397 63396 63395 63394 63393 63391 63390 63389 63388 63386 63385 63384 63382 63381 
63375 63373 63372 63371 63370 63369 63368 63365 63364 63363 63362 63361 63360 63358 63357 
63356 63355 63354 63352 63350 63349 63348 63347 63346 63344 63343 63342 63339 63337 63336 
63335

附加信息:

感谢任何帮助 - 已经谢谢了! 耶伦

我找到了:使用 xargs,使用 -n1 开关取最大值。一次 1 个参数:

wp wc shop_order list --user=4 --field=id | xargs -n1 wp wc shop_order delete --user=4

输出看起来像这样(可能便于调试):

Success: Trashed shop_order 63333

Success: Trashed shop_order 63332

Success: Trashed shop_order 63331

备注:

  • 此命令仅将订单移至 垃圾桶。要真正 删除 它们,请使用布尔标志 --force
  • wp wc shop_order list returns 最大值100 个订单。你可以用标志 --per_page 降低它,但你不能提高它。我确信这可以通过一些优雅的条件循环来解决,但我只想删除大约 6,700 个订单,所以一个固定数量的循环就可以了。

最终结果:

for i in {1..70}
do
    wp wc shop_order list --user=4 --field=id | xargs -n1 wp wc shop_order delete --user=4 --force=1
done

输出示例(请注意,它现在显示 Deleted 而不是 Trashed):

Success: Deleted shop_order 62886.

Success: Deleted shop_order 62885.

Success: Deleted shop_order 62884.

我还是很疑惑,为什么原来的代码对删除用户有效,但对订单无效。

关于性能的一些事情:上面的代码大约需要 5 秒/订单。所以(以我为例)删除 67,000 个订单大约需要 9.5 小时