【问题标题】:Assign orders from guest customers to particular user将来自来宾客户的订单分配给特定用户
【发布时间】:2023-03-05 08:19:01
【问题描述】:

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

LoicTheAztecanswer 的解决方案功劳

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 团队的 woocommerce 订单导出和导入插件导入订单..

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

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

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

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

那么有没有其他选项可以让这些新注册用户不分配旧订单..

请帮忙

【问题讨论】:

  • 这些客人订单是否具有与用户订单不同的特定元值...您能否使用客人订单 ID 给出结果,2 个不同客人订单的 2 个结果会很好:@ 987654325@
  • @Ali_k 感谢您帮助我 $customer_id 是 0 表示我很确定的客人订单.. 但我仍然会重新检查并回复您

标签: wordpress woocommerce


【解决方案1】:

也许您可以尝试基于 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();

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

代码已经过测试并且可以工作。

【讨论】:

  • 效果很好..非常感谢..你救了我的命..再次感谢
  • 如果我记错了,我可能会弄错一些关于 sql 字符串的注释。我对代码也很整洁,在缩进的新行上开始一个字符串,但我记得必须在 DB 类中的方法中添加一个 trim(),然后才能进行 DB 查询以摆脱空白,因为它不是t 缓存,因为字符串不是以 SELECT 开头的。我不确定 Wordpress 是否也这样做。
【解决方案2】:

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

【讨论】:

  • 感谢您的输入,我在 6 个月前导入了这个,我没有旧的订单备份。所以没有办法重新导入.. 相反,我想运行查询并更新所有客人订单的客户.. 通过分配给真实客户或将它们分配给管理员
  • 元值是否可用?如果可以的话,我可以帮忙,否则没有人可以帮忙。
  • 元值.. ?实际上,我发布的代码适用于案例 1)如果 id 为 9458 的订单来自用户(id = 479)并且我希望将其分配给其他用户 - 500 .. 这工作正常.. 但对于订单所属的案例 2对客户 id 为 0 的客人,那么这不起作用……意味着这部分不起作用 update_post_meta($order_id, '_customer_user', $new_customer_id,0);
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多