如果我使用REST API将新客户添加到Woo,我需要避免发送新客户电子邮件。REST API文档没有提到这一点,也没有设置可以阻止“WC_Email_Customer_New_Account”电子邮件的参数
我已经尝试了10种不同的方法,我将列出最近的方法
- 直接编辑Woo源代码class-wc-emails.php。即使这样也不行,因为当我收集用户 meta时,它仍然是空白的,只有用户ID和漂亮的名称
- 创建一个检查外部API的插件,如果满足某个条件,则执行
remove_action('woocommerce_created_customer_notification', array($email_class->emails['WC_Email_Customer_New_Account'], 'trigger'));
- 处理插件内的一切,但我有同样的问题1。
2条答案
按热度按时间disbfnqx1#
我想我成功地完成了它。我的目标是通过WooCommerce REST API(客户端点)创建一个用户(客户),而不是触发新帐户电子邮件。
第一个可疑的是
woocommerce_email_enabled_customer_new_account
过滤器,它提供了\WP_User
和\WC_Email_Customer_Completed_Order
对象,第一个想法显然是对用户运行get_user_meta()
。事实证明,REST端点处理程序只能在用户创建后推送元数据,电子邮件通知通过
\WC_Emails()
中的钩子隐式触发。这意味着当我们的代码在电子邮件钩子期间运行时,还没有可用的元数据。接下来要检查的是用户被推到任何地方之前的时刻。这将是
woocommerce_before_data_object_save
,这次是一个操作。它给了我们两个对象,\WC_Customer
和\WC_Customer_Data_Store
。\WC_Customer
对象有我们的元数据,耶!让我们将现有代码封装到另一个处理程序中。它仍然不起作用。因为这是 *before object保存 *,当我们将
$customer
捕获到我们的作用域中时,用户不存在。所以$customer->get_id()
返回0(零)。看起来我们在时间上有点过了-需要向前滚动。woocommerce_created_customer
看起来是一个很好的候选对象。它为我们提供了新的用户ID。让我们一起编译所有内容。
现在让我们回顾一下。我们连接到数据存储并捕获保存
\WC_Customer
对象的时刻。我们执行基于元数据的自定义逻辑来决定是否继续。然后我们跳到创建用户的时刻以检索其ID。然后我们在“email enabled?”检查期间再跳一点,以实际禁用给定用户的通知。gstyhher2#
试试这个
请访问:
WooCommerce -〉设置-〉电子邮件选项卡
您可以找到选项是“新帐户”。单击管理按钮。
取消选中“启用此电子邮件通知”。