将MySQL PostMeta表行从wp_postmeta移出并按日期移动到新表中

时间:2016-11-24 19:28:01

标签: mysql wordpress woocommerce

我正在管理一个woocommerce商店,其中wp_postmeta表失控,有800k行并且每天都在增长。我想构建一个查询,允许我移动具有相同post_id的meta_id行,其中_customer_user ='0'在某个日期之前'_paid_date'的位置和位置(假设3个月?)。这些是访客结账订单,不依赖于用户帐户,因此我希望将其归档并创建自定义帖子类型来操纵数据。

新表只是postmeta表的一个克隆,当然具有不同的名称。

screenshot of table

这就是我到目前为止所做的一切:

SELECT `meta_id` FROM `can_postmeta` 
WHERE `meta_key` = '_customer_user' AND `meta_value` = '0' 

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果要清理访客客户的所有条目的网站,则需要删除表wp_woocommerce_order_items(链接到order_id),wp_woocommerce_order_itemmeta(与order_item_id链接)中的条目。 wp_woocommerce_payment_tokenswp_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);