如何获取Wishlist含指定商品的WooCommerce客户并发送缺货通知邮件
WooCommerce 愿望单目标客户查询及邮件通知实现方案
方案1:直接数据库查询(最高效,适合大流量站点)
该方案直接跳过插件冗余逻辑,就算站点有数十万条愿望单记录,查询速度也能控制在100ms以内,是性能最优的实现方式。
以下为适配主流YITH WooCommerce Wishlist插件的查询代码,如使用其他wishlist插件只需替换对应表名即可:
global $wpdb; $target_product_id = 123; // 替换为实际需要查询的目标商品ID // 查询将商品加入愿望单的已登录用户邮箱 $logged_in_user_emails = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT u.user_email FROM {$wpdb->prefix}yith_wcwl wl LEFT JOIN {$wpdb->users} u ON wl.user_id = u.ID WHERE wl.prod_id = %d AND wl.user_id != 0", $target_product_id ) ); // 查询将商品加入愿望单的访客邮箱(需插件支持存储访客邮箱信息) $guest_user_emails = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT wl.user_email FROM {$wpdb->prefix}yith_wcwl wl WHERE wl.prod_id = %d AND wl.user_id = 0 AND wl.user_email != ''", $target_product_id ) ); // 合并去重得到完整的客户通知列表 $notify_email_list = array_unique( array_merge( $logged_in_user_emails, $guest_user_emails ) );
方案2:调用插件内置API(兼容性优先,适合中小站点)
如果不想直接操作数据库,可直接使用插件提供的公开API实现,插件版本升级也不会影响代码可用性:
if ( function_exists( 'YITH_WCWL' ) ) { $target_product_id = 123; // 替换为实际需要查询的目标商品ID $all_wishlists = YITH_WCWL()->get_wishlists( [ 'wishlist_contains' => $target_product_id ] ); $notify_email_list = []; foreach ( $all_wishlists as $wishlist ) { $user = get_user_by( 'id', $wishlist->get_user_id() ); if ( $user && !in_array( $user->user_email, $notify_email_list ) ) { $notify_email_list[] = $user->user_email; } } }
流程优化建议
- 可挂钩WooCommerce原生库存变更钩子
woocommerce_product_set_stock,当商品库存低于预设阈值时自动触发客户查询和邮件发送逻辑,无需手动操作 - 邮件发送逻辑通过WordPress异步任务
wp_schedule_single_event处理,避免库存变更时前台/后台页面卡顿 - 新增自定义字段记录发送状态,同一客户同一商品仅发送一次缺货通知,避免重复骚扰用户
内容的提问来源于stack exchange,提问作者yorleen
相关产品推荐
相关产品推荐

