Woocommerce:覆盖现有电子邮件所需的登录信息。将订单添加到用户帐户

2024-01-12

Woocommerce 设置:

  • 访客结帐已禁用。
  • 启用结帐时创建帐户(自动生成用户名和密码)

如果用户已注册。但未登录。 结帐错误 “您的电子邮件地址已注册一个帐户。请登录。”

我如何覆盖它 完成订单,并将订单与现有帐户绑定。 提示用户下次登录以便更快结帐

找不到任何可以做到这一点的片段或模块

还没有。很高兴得到奖励。


没有这个钩子。您可能需要修改 WC 核心中的 process_customer 函数 (plugins/woocommerce/includes/class-wc-checkout.php) Line#935 - 请记住,不鼓励编辑核心(更新后,您的更改将会丢失)

protected function process_customer( $data ) {
        $customer_id = apply_filters( 'woocommerce_checkout_customer_id', get_current_user_id() );

        if ( ! is_user_logged_in() && ( $this->is_registration_required() || ! empty( $data['createaccount'] ) ) ) {
            $username    = ! empty( $data['account_username'] ) ? $data['account_username'] : '';
            $password    = ! empty( $data['account_password'] ) ? $data['account_password'] : '';

                        if(email_exists($data['billing_email'])){
                        $creds = array();
                        $creds['user_login'] = $user_login;
                        $creds['user_password'] = $user_password;
                        $creds['remember'] = true;

                        $user = wp_signon($creds, false);

                        $customer_id = $user->ID;

                        wp_set_current_user($customer_id, $user_login);
                        wp_set_auth_cookie($customer_id, true, false);
                        do_action('wp_login', $user_login);
                        }else{
                        $customer_id = wc_create_new_customer( $data['billing_email'], $username, $password );
                        }

            if ( is_wp_error( $customer_id ) ) {
                throw new Exception( $customer_id->get_error_message() );
            }

            wp_set_current_user( $customer_id );
            wc_set_customer_auth_cookie( $customer_id );

            // As we are now logged in, checkout will need to refresh to show logged in data.
            WC()->session->set( 'reload_checkout', true );

            // Also, recalculate cart totals to reveal any role-based discounts that were unavailable before registering.
            WC()->cart->calculate_totals();
        }

        // On multisite, ensure user exists on current site, if not add them before allowing login.
        if ( $customer_id && is_multisite() && is_user_logged_in() && ! is_user_member_of_blog() ) {
            add_user_to_blog( get_current_blog_id(), $customer_id, 'customer' );
        }

        // Add customer info from other fields.
        if ( $customer_id && apply_filters( 'woocommerce_checkout_update_customer_data', true, $this ) ) {
            $customer = new WC_Customer( $customer_id );

            if ( ! empty( $data['billing_first_name'] ) ) {
                $customer->set_first_name( $data['billing_first_name'] );
            }

            if ( ! empty( $data['billing_last_name'] ) ) {
                $customer->set_last_name( $data['billing_last_name'] );
            }

            // If the display name is an email, update to the user's full name.
            if ( is_email( $customer->get_display_name() ) ) {
                $customer->set_display_name( $data['billing_first_name'] . ' ' . $data['billing_last_name'] );
            }

            foreach ( $data as $key => $value ) {
                // Use setters where available.
                if ( is_callable( array( $customer, "set_{$key}" ) ) ) {
                    $customer->{"set_{$key}"}( $value );

                    // Store custom fields prefixed with wither shipping_ or billing_.
                } elseif ( 0 === stripos( $key, 'billing_' ) || 0 === stripos( $key, 'shipping_' ) ) {
                    $customer->update_meta_data( $key, $value );
                }
            }

            /**
             * Action hook to adjust customer before save.
             *
             * @since 3.0.0
             */
            do_action( 'woocommerce_checkout_update_customer', $customer, $data );

            $customer->save();
        }

        do_action( 'woocommerce_checkout_update_user_meta', $customer_id, $data );
    }

如果您启用了允许客户在结帐时登录,则会出现从结帐页面登录的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Woocommerce:覆盖现有电子邮件所需的登录信息。将订单添加到用户帐户 的相关文章

  • WooCommerce:在结帐页面中默认设置国家/地区

    我在用WooCommerce在我的 WordPress 网站中 默认情况下 结帐页面上会填充客户的账单和运输详细信息 我希望该国家 地区不会被默认设置 相反 即使用户已登录 它也会要求选择国家 地区 有什么建议么 为了实现这个目标我应该做什
  • 更新 WooCommerce 产品价格和库存

    我有外部 REST API 我从中构建一个如下所示的数组 arr array 1 gt array code gt 0100686 qty gt 2 price gt 65 22 2 gt array code gt 0100687 qty
  • 更改所有 Woocommerce 电子邮件通知中的“回复”电子邮件地址

    在 Woocommerce 中 我想更改应始终用作的电子邮件地址回复地址对于所有电子邮件通知 Woocommerce 如何做到这一点 以下操作将更改所有电子邮件通知中的 回复 电子邮件地址 和姓名 add filter woocommerc
  • 在 Woocommerce 中每个商品名称旁边显示购物车中的产品自定义字段

    我有一家商店 每种产品都有不同的交货日期 我将此日期存储在名为的自定义字段中shpng使用ACF 我想要实现的是在购物车中的每个产品旁边显示适当的字段 到目前为止我尝试过的是 我测试了 SOF 上列出的大约 10 个解决方案 example
  • 更改自定义产品类型的 WooCommerce“库存”文本(预购)

    一点背景知识 我目前正在使用WooCommerce 插件的产品预订单 https wordpress org plugins product pre orders for woo 由别墅主题 总的来说 除了这一件事之外 它对于我的目的来说效
  • 在 Woocommerce 产品标题中添加换行符

    假设我的产品标题是 棕色皮鞋 但根据我的列宽 标题如下所示 棕色皮革 Shoes 我知道可以进行角色替换 以便 在后端变成换行符 br 但我不知道怎么办 我希望它看起来像这样 棕色 皮鞋 我找到了这些参考资料 在商店页面上的产品标题上添加一
  • 是否可以扩展 woocommerce 产品休息端点?

    有没有办法扩展 woocommerce Rest api 中的产品对象 wp json wc v3 products 以非破坏性的方式 因此使用该端点的插件不会中断 我目前尝试创建自己的休息端点来复制该对象 但现在缺少大量数据 我也尝试过类
  • Woocommerce 购物车通知显示多次

    我有一个功能正常工作 除了它在购物车中显示通知两次而不是一次 该功能应用折扣并显示通知 该函数查找特定类别的商品并添加总数 如果满足折扣金额 则应用折扣并显示通知 现在 即使购物车中只有一件商品 它也会显示两次通知 我尝试过添加wc cle
  • 有没有人有一段 PHP 代码来抓取字符串中的第一个“句子”?

    如果我有这样的描述 我们更喜欢可以回答的问题 而不仅仅是讨论 提供详细信息 写得清晰简单 我想要的只是 我们更喜欢可以回答的问题 而不仅仅是讨论 我想我会搜索一个正则表达式 比如 确定strpos 然后从主字符串中执行一个substr 但我
  • 将订单总重量添加到 WooCommerce 新订单电子邮件通知

    是否可以在 WooCommerce 新订单 电子邮件通知 针对管理员 中显示订单的总重量 这是挂钩在 woocommerce email after order table 操作挂钩中的自定义函数 它将在 新订单 电子邮件通知中显示总重量
  • 在 Woocommerce 编辑订单页面中显示可编辑的自定义字段值

    我不是开发人员 但以某种方式设法将 Woocommerce 自定义字段添加到结账和订单编辑页面 有类似的问题 但我找不到正确的解决方案 自定义字段在管理订单编辑页面中可见但他们不显示值并且不会添加到订单电子邮件中 我缺少什么 请看最后的截图
  • 针对 Woocommerce 中多个产品类别计数的 ajax 添加到购物车的 JS 警报

    在 Woocommerce 中 当达到特定产品类别的购物车中的产品的特定数量时 我尝试显示 JavaScript 甜蜜警报 并在达到二级类别的产品的特定数量时显示另一个警报 商品通过 AJAX 添加到购物车 这就是我想使用 JavaScri
  • 处理后显示订单中的产品自定义字段值

    在 woocommerce 上 我使用下面的代码在购物车和结帐时呈现一些产品自定义字段 add filter woocommerce get item data rendering meta field on cart and checko
  • Woocommerce 预订中每人和每件商品的动态结账自定义字段

    对于预订网站 我正在尝试创建一个功能 可以根据人数添加与会者列表 感谢 LoicTheAztec 我已经获得了单次预订的代码 那部分工作正常 我还需要相同的功能来进行多次预订 我怎样才能实现这个目标 这是代码 Add a new check
  • 通过自定义文本更改库存文本中的 WooCommerce 产品可用性

    我想更改库存数量后面的 有库存 文字 我尝试在我的 WordPress php 编辑器中添加此 PHP 代码 但它不起作用 你知道为什么吗 谢谢 add filter woocommerce get availability text bb
  • Paypal 付款标准默认输入卡详细信息

    我确信这个主题已经在这里了 但我刚刚与 Paypal 通电话 试图查明他们的帐户上是否有一个设置 可以让客户看到 输入卡详细信息区域 而不是自动 默认设置 引导您登录 注册您的 PayPal 帐户 Paypal 表示没有一个设置可以在他们这
  • Woocommerce 获取产品

    我使用以下代码从我的 WordPress 网站中的 WooCommerce 获取产品类别列表
  • Visual Studio 中的 C++ 代码片段支持吗?

    我正在用本机 C 而不是 C CLR 编写代码 我知道片段管理器和片段选择器接口没有对 C 的内置支持 但是我发现了一个名为 snippy 的实用程序 据说它可以生成 C 片段 这是程序生成的 C 代码片段
  • 计算特定产品类别的购物车商品数量

    我试图仅从 WooCommerce 中的特定产品类别获取购物车中的商品数量 我正在为一家酒厂做一个网站 它有酒精和非酒精产品 所有葡萄酒都属于 葡萄酒 主类别或类别 ID 34 其下有许多子类别和产品 对于属于此类别的任何商品 我需要知道此
  • 在 Visual Studio 中使用代码片段

    Right now when I want to use the cw snippet Code snippet for Console WriteLn I am typing cw Tab Tab 这是正确的 最快的 方法吗 如果有某种方

随机推荐

  • 根据屏幕尺寸更改标签尺寸 xamarin 表单

    我正在使用 xamarin forms 来做一个应用程序 我发现使用相同的大小来向 ios 设备发送字母是行不通的 在 7 plus 上它运行良好 但在 iphone 5 上它对于屏幕大小来说是一个大字母 有人知道如何制作具有可缩放尺寸的字
  • 如何让javascript忽略转义(\)字符? [复制]

    这个问题在这里已经有答案了 qAnswersR 90430 qAnswersR 90430 push math k frac x 20 2 256 frac y 15 2 81 1 math 我需要将值放入变量中 但是当我像这样 conso
  • rtrim 函数不适用于结尾 h 字母[重复]

    这个问题在这里已经有答案了 file refinish php folder rtrim file php echo folder refinis 哪里结束h 我尝试了其他一些结尾字母 没关系 rtrim 不会删除您在第二个参数中指定的字符
  • x86-64 汇编的性能优化 - 对齐和分支预测

    我目前正在编写一些 C99 标准库字符串函数的高度优化版本 例如strlen memset 等 使用带有 SSE 2 指令的 x86 64 汇编 到目前为止 我已经在性能方面取得了出色的结果 但当我尝试进一步优化时 有时会出现奇怪的行为 例
  • Shapeless 中 Nat 类型的限制

    在无形中 Nat 类型代表了一种在类型级别对自然数进行编码的方法 例如 这用于固定大小的列表 您甚至可以在类型级别上进行计算 例如附加一个列表N列表中的元素K元素并返回一个在编译时已知的列表N K元素 Is this representat
  • JPA中@Table注解有什么用?

    使用这些注释的全部目的是独立于数据库提供者 而不是重新生成 JAR 存档 如果我硬核 Table name myDatabase myTableName 我一开始就不明白使用 hibernate 的意义 如果我决定切换到不同的数据库提供商
  • 如何在for循环(Python)中写入txt文件?

    作为一个简单的练习 我试图将最多 500 个素数打印到一个文本文件中 但我不确定如何正确地将写入代码插入到 for 循环中 当前输出的只是最后一个素数 在本例中为 499 for num in range 2 500 prime True
  • Matplotlib Line3DCollection 用于随时间变化的颜色

    我正在尝试绘制随时间演变的 3D 线轨迹 并且我希望颜色发生变化以显示时间的流逝 例如从浅蓝色到深蓝色 然而 明显缺乏使用 matplotlib 的教程Line3DCollection 这是最接近的 https stackoverflow
  • 对 WebService 的 jQuery 调用返回“无传输”错误

    我有以下网络服务 WebMethod public string HelloWorld return Hello World 它是库存标准 没有对类装饰器进行任何更改 我有这个 jQuery 方法 var webMethod http lo
  • SimpleDateFormat 格式错误的值

    以下代码 SimpleDateFormat sdf new SimpleDateFormat MM dd System out println sdf format new Date 1293253200 12 25 2010 05 00
  • 实施工厂模式的正确方法是什么?

    我只是想知道这是否是在 PHP 中创建对象和实现工厂模式的正确方法 我知道我们有工厂方法模式和抽象工厂模式 但是我们有像下面这样的模式吗http noondreams com shared data pages images Factory
  • 如何返回 Mono,其中响应实体可以是两种不同类型

    我是 Spring Webflux Reactor Core 的新手 正在尝试执行以下功能 调用 userservice LoginWebApp 如果返回用户 则返回类型为 User 的ResponseEntity 如果为空 则返回 Str
  • 有没有一种更简单的方法可以删除字符第一次出现之前的所有内容?

    正如标题所说 这确实更出于兴趣 我的文件名格式为1347020478 Workbook1 12 19 19 csv 我想要做的是将时间戳从文件名的开头移开并返回其他所有内容 所以Workbook1 12 19 19 csv 我有以下代码可以
  • VLC 和 MJPEG 解码器流式传输(标头无效)

    我正在制作一个包含视频流的 WinRT 应用程序 现在我以 VLC 作为流媒体服务器和 MJPEGDecoder 库结束 http mjpeg codeplex com http mjpeg codeplex com 在客户端上解码视频 但
  • 如何编写批处理文件来设置类路径并执行java程序

    我的一些java程序需要很多jar文件才能执行 为了执行此操作 我可能必须将所有这些 jar 文件添加到环境变量的类路径变量中 否则每次打开新的 cmd 提示符时都必须在命令提示符处手动设置类路径 我不想在环境变量中的类路径变量中添加所有
  • 虚函数破坏私有访问

    我最近看到这篇文章IBM site http publib boulder ibm com infocenter comphelp v8v101 index jsp topic 2Fcom ibm xlcpp8a doc 2Flanguag
  • 从字典数组中删除键值的重复项

    我正在执行 Facebook API 请求 以返回特定 Facebook 群组中的所有专辑名称 我返回一个包含 3 个键 值的字典数组 其中一个是映射到专辑名称的键 name 以及键 id 和 created time 唯一的问题是 由于某
  • iphone 模拟器(10.3) 时间未根据 mac OS (10.13) 中的时区显示

    I have update my mac os to 10 13 beta version now it showing GMT time for my old simulator with ios version 10 3 its not
  • 在 Rails 4 中的 has_and_belongs_to_many 关系中使用 uniq

    我正在尝试对一个实施独特的约束has and belongs to many像这样的关系 class User has and belongs to many foos uniq true end 因为我只想要独一无二foos当我打电话时u
  • Woocommerce:覆盖现有电子邮件所需的登录信息。将订单添加到用户帐户

    Woocommerce 设置 访客结帐已禁用 启用结帐时创建帐户 自动生成用户名和密码 如果用户已注册 但未登录 结帐错误 您的电子邮件地址已注册一个帐户 请登录 我如何覆盖它 完成订单 并将订单与现有帐户绑定 提示用户下次登录以便更快结帐