将来宾客户的订单分配给特定用户

时间:2017-09-30 23:14:12

标签: wordpress woocommerce

我正在使用following code来解决此问题,但这不适用于来宾客户的订单。但是,这适用于属于某些注册用户/客户的订单,但不适用于属于访客客户的订单。

LoicTheAztec

answer解决方案
function cristmas_bulk_editing_orders(){

    if(!is_admin()) return; // Will work only from Admin Backed.
    else {

        $order_id = 9458;
        $new_customer_id = 479;

            // Getting the postmeta customer ID for 'order' post-type
            $customer_id = get_post_meta( $order_id, '_customer_user', true );
            var_dump($customer_id);
            // If it's an existing order and doesn't have already this user ID
            // It update the customer ID
            if( !empty($customer_id) && $new_customer_id != $customer_id )
                update_post_meta($order_id, '_customer_user', $new_customer_id,0);
                echo 'order updated';

    }

}
cristmas_bulk_editing_orders();

原始问题

我们通过woocommerce order export& amp;来自woocommerce团队的导入插件..

但是在这个过程中出了问题..大多数订单都没有分配任何客户..

所以现在,当新客户注册时,他/她会自动分配其中一个订单..

所以他们基本上都看到他们最近订单中的1个订单属于其他客户cusotmer,然后他们拥有关于其他客户的所有信息。他们的电子邮件等..

所以一个选择是我找到所有订单(没有客户帮助他们的问题)并且我将它们分配给管理员..但是这也有一些问题......

所以这些新注册用户没有其他任何选项可以分配旧订单..

请帮忙

2 个答案:

答案 0 :(得分:2)

可能你可以尝试基于SQL查询的其他类似功能,这应该可以解决问题。在开始之前,进行数据库备份。我添加了控件(或限制),如:

  • 最长日期(YYYY-MM-DD 00:00:00日期时间格式)
  • 订单号范围

所以这就是代码:

function easter_bulk_editing_orders(){

    if( ! is_admin() ) return; // Will work only from Admin Backed.
    else {
        $processed_orders = array();

        // Define the replacement user ID
        $replacement_user_id = '2500';

        // Define the DATE LIMIT for guest orders max date limit
        $max_date = '2017-12-09 00:00:00';

        // Define an order range
        $order_id_min = '0';
        $order_id_max = '100000';

        global $wpdb;

        // Get all guest orders below a defined max date
        $old_guest_orders = $wpdb->get_results( "
            SELECT pm.*, p.post_date
            FROM {$wpdb->prefix}postmeta AS pm
            LEFT JOIN {$wpdb->prefix}posts AS p ON pm.post_id = p.ID
            WHERE pm.post_id BETWEEN $order_id_min AND $order_id_max
            AND pm.meta_key LIKE '_customer_user'
            AND ( pm.meta_value LIKE '0' OR pm.meta_value LIKE '' )
            AND p.post_date <= '$max_date'
        " );

        foreach( $old_guest_orders as $guest_order ){
            $meta_id = $guest_order->meta_id;

            $wpdb->query( "
                UPDATE {$wpdb->prefix}postmeta as pm
                SET pm.meta_value = '$replacement_user_id'
                WHERE pm.meta_id = '$meta_id'
            " );
            // Set each order ID in an array
            $processed_orders[] = $guest_order->post_id;
        } 
        // Testing ( raw output of processed orders IDS )
        var_dump($processed_orders);
    }
}

// Run the function
easter_bulk_editing_orders();

代码进入活动子主题(活动主题或任何插件文件)的function.php文件中。

您只需使用此功能一次,然后将其删除(见下文)。

用法:

  

将此代码粘贴并保存在function.php文件中后,在浏览器中显示或重新加载任何管理页面。   现在你可以用这种方式评论函数并保存:

// easter_bulk_editing_orders();

检查订单是否已根据需要更改,并删除所有此代码。

代码经过测试并有效。

答案 1 :(得分:0)

导入时出错,请尝试重新导入。你有没有尝试过WP All Import Premium。它将使用拖放标题,类别和元字段导入任何内容。您还可以在导入时为元发布新的元名称。如果您需要更多帮助,请分享更多详细信息。