我正在管理一个woocommerce商店,其中wp_postmeta表失控,有800k行并且每天都在增长。我想构建一个查询,允许我移动具有相同post_id的meta_id行,其中_customer_user ='0'在某个日期之前'_paid_date'的位置和位置(假设3个月?)。这些是访客结账订单,不依赖于用户帐户,因此我希望将其归档并创建自定义帖子类型来操纵数据。
新表只是postmeta表的一个克隆,当然具有不同的名称。
这就是我到目前为止所做的一切:
SELECT `meta_id` FROM `can_postmeta`
WHERE `meta_key` = '_customer_user' AND `meta_value` = '0'
非常感谢您的帮助!
答案 0 :(得分:0)
如果要清理访客客户的所有条目的网站,则需要删除表wp_woocommerce_order_items
(链接到order_id),wp_woocommerce_order_itemmeta
(与order_item_id链接)中的条目。 wp_woocommerce_payment_tokens
和wp_woocommerce_payment_tokenmeta
相同。
我不知道,如果你想使用php脚本或sql请求来完成这项工作,但这里有一个小脚本来导出客户订单。也许它可以给你一些想法。
$filename = 'order_bu.json';
$args = array(
'post_type'=> 'shop_order',
'post_status'=> 'wc-completed',
'posts_per_page' =>-1,
'post_author' => 0
);
$orders = new WP_Query($args);
foreach($orders->posts as $order){
echo $order->ID . ' | '.$order->post_status . '<br/>';
$order_metas = get_post_meta($order->ID);
$orders_metas[] = get_post_meta($order->ID);
$order_stack[] = array($order, $orders_metas);
//wp_delete_post($order->ID);
}
$json = json_encode($order_stack);
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
if (fwrite($handle, $json) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "Success, wrote ($json) to file ($filename)";
fclose($handle);