在 WooCommerce 结账时向客户展示自定义消息:处理中订单的产品
2024-03-26 12:49:29
在 WooCommerce 结帐时向客户显示自定义消息:过去购买了订单状态为“处理中”的产品
介绍
网上购物正变得越来越普遍,电子商务平台也不断完善,为消费者提供无缝的购物体验。WooCommerce 是一个流行的 WordPress 插件,用于创建和管理在线商店。虽然 WooCommerce 提供了一系列强大的功能,但有时需要对现有功能进行定制以满足特定的业务需求。
挑战
一位 WooCommerce 店主希望向在结账时购买了订单状态为“处理中”的产品的客户显示一条自定义消息。该消息应仅在满足以下条件时显示:
- 客户已登录
- 用户角色为管理员或客户
- 过去购买的产品的订单状态仍为“处理中”
解决方案
为了解决此挑战,我们需要修改 WooCommerce 结帐流程,在满足特定条件时动态显示自定义消息。这是实现此功能的分步指南:
步骤 1:检查用户登录状态和角色
在处理自定义消息之前,我们需要验证用户是否已登录并具有正确的角色。以下是检查用户状态的代码:
function user_logged_in_product_already_bought() {
if (!is_user_logged_in()) {
return; // 用户未登录,退出函数
}
$user = wp_get_current_user();
$allowed_roles = ['administrator', 'customer']; // 允许查看消息的角色
if (!array_intersect($allowed_roles, $user->roles)) {
return; // 用户角色不在允许范围内,退出函数
}
// 用户已登录并具有适当的角色,继续处理
}
步骤 2:检查过去购买的产品订单状态
接下来,我们需要检查用户过去购买的特定产品当前的订单状态。以下是查询数据库以获取订单状态信息的代码:
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $item => $values) {
$product_id = $values['data']->get_id();
$order_query = new WP_Query([
'post_type' => 'shop_order',
'meta_query' => [
[
'key' => '_customer_user',
'value' => get_current_user_id(),
],
[
'key' => '_product_id',
'value' => $product_id,
],
[
'key' => '_order_status',
'value' => 'processing',
],
],
]);
if ($order_query->have_posts()) {
// 产品订单状态为“处理中”,显示自定义消息
wc_print_notice('您过去购买过此商品。是否要再次购买?', 'success');
break; // 找到一个匹配的订单,退出循环
}
}
步骤 3:注册 WooCommerce 钩子
现在我们有了必要的函数来检查用户状态和订单状态,我们需要在 WooCommerce 结帐流程中注册一个钩子。以下是注册钩子的代码:
add_action('woocommerce_before_checkout_form', 'user_logged_in_product_already_bought');
这将确保我们的函数在结帐流程的“结帐表单之前”阶段运行。
完整代码
以下是如何将上述代码段合并到最终解决方案中的完整代码:
function user_logged_in_product_already_bought() {
if (!is_user_logged_in()) {
return;
}
$user = wp_get_current_user();
$allowed_roles = ['administrator', 'customer'];
if (!array_intersect($allowed_roles, $user->roles)) {
return;
}
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $item => $values) {
$product_id = $values['data']->get_id();
$order_query = new WP_Query([
'post_type' => 'shop_order',
'meta_query' => [
[
'key' => '_customer_user',
'value' => get_current_user_id(),
],
[
'key' => '_product_id',
'value' => $product_id,
],
[
'key' => '_order_status',
'value' => 'processing',
],
],
]);
if ($order_query->have_posts()) {
wc_print_notice('您过去购买过此商品。是否要再次购买?', 'success');
break;
}
}
}
add_action('woocommerce_before_checkout_form', 'user_logged_in_product_already_bought');
结论
通过实现上述解决方案,WooCommerce 店主现在可以在结帐时向特定客户显示自定义消息,告知他们过去购买了订单状态为“处理中”的产品。这将有助于增强客户体验,并为店主提供一个机会来鼓励再次购买。
常见问题解答
1. 此解决方案是否适用于任何类型的 WooCommerce 产品?
- 是的,此解决方案适用于 WooCommerce 销售的任何类型的产品。
2. 我可以在自定义消息中包含什么信息?
- 您可以根据需要在自定义消息中包含任何相关信息,例如产品名称、购买日期或任何其他相关详细信息。
3. 此解决方案是否与 WooCommerce 的所有版本兼容?
- 此解决方案已针对 WooCommerce 的最新版本进行测试,但它也可能与较旧的版本兼容。
4. 我可以在哪里找到有关 WooCommerce 钩子和函数的更多信息?
- WooCommerce 官方文档提供了有关钩子和函数的详尽信息:https://woocommerce.com/document
5. 如果我需要其他自定义,我可以修改此解决方案吗?
- 当然,此解决方案是一个起点,您可以根据您的特定需求进行修改和调整。