如何从Node.js站点Site2通过MySQL在WordPress站点Site1创建WooCommerce优惠券
仅通过MySQL创建WooCommerce优惠券的方法
嘿,我来帮你搞定这个问题!直接操作MySQL创建WooCommerce优惠券是可行的,但WooCommerce的优惠券不仅仅是wp_posts里的一条记录,还需要在wp_postmeta里添加对应的元数据来定义优惠券的规则(比如折扣类型、金额、使用限制等)。你之前的SQL语句只插入了post记录,缺少关键的元数据,所以没法正常工作。
步骤1:插入优惠券到wp_posts表
首先要在wp_posts中添加一条post_type为shop_coupon的记录,注意补充必填字段:
INSERT INTO wp58_posts ( post_title, post_status, comment_status, ping_status, post_password, post_name, post_type, post_date, post_date_gmt, post_author, post_content ) VALUES ( 'Test Coupon', -- 优惠券名称 'publish', 'closed', 'closed', '', -- 优惠券密码(可选,留空则不需要密码) 'test-coupon', -- 优惠券slug(要唯一) 'shop_coupon', NOW(), -- 当前时间 UTC_TIMESTAMP(), -- UTC时间 1, -- 发布优惠券的用户ID(确保这个ID在wp_users中存在) '' -- 优惠券描述(可选) );
这里要注意:
post_name是优惠券的唯一标识(slug),不能和现有优惠券重复post_author要填你的WordPress站点中存在的用户ID(比如管理员ID通常是1)post_password如果需要设置优惠券密码才填,否则留空
步骤2:获取刚插入的优惠券ID
执行完上面的语句后,需要获取这条记录的ID(也就是优惠券ID),可以用下面的语句:
SET @coupon_id = 291095;
这条语句会把刚插入的post ID赋值给变量@coupon_id,后面插入元数据时会用到。
步骤3:插入优惠券的核心元数据
WooCommerce的所有优惠券规则都存在wp_postmeta表中,下面是必填和常用的元数据示例,你可以根据需求调整:
-- 设置折扣类型:fixed_cart(固定金额)、percent(百分比)、fixed_product(固定产品折扣) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'discount_type', 'percent'); -- 设置折扣金额(比如10表示10%折扣,或者10.00表示10元固定折扣) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'coupon_amount', '10'); -- 设置优惠券是否仅限登录用户使用(yes/no) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'individual_use', 'no'); -- 设置是否允许与其他优惠券叠加(yes/no) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'exclude_sale_items', 'no'); -- 设置最低消费金额(可选,留空则无限制) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'minimum_amount', ''); -- 设置最高消费金额(可选,留空则无限制) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'maximum_amount', ''); -- 设置使用次数限制(可选,0表示无限制) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'usage_limit', '0'); -- 设置单个用户使用次数限制(可选,0表示无限制) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'usage_limit_per_user', '0'); -- 设置过期日期(可选,格式为YYYY-MM-DD,留空则永不过期) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'expiry_date', '2024-12-31');
如果需要更多自定义规则(比如适用产品、排除产品等),可以添加对应的元数据,比如:
product_ids:适用的产品ID列表(逗号分隔)exclude_product_ids:排除的产品ID列表(逗号分隔)product_categories:适用的分类ID列表(逗号分隔)exclude_product_categories:排除的分类ID列表(逗号分隔)
步骤4:可选:插入额外的元数据
有些WooCommerce的扩展或者默认功能会用到其他元数据,比如:
-- 设置优惠券的描述(也可以在wp_posts的post_content里设置) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'description', '这是一个测试优惠券'); -- 设置是否允许用于虚拟产品(yes/no) INSERT INTO wp58_postmeta (post_id, meta_key, meta_value) VALUES (@coupon_id, 'free_shipping', 'no');
注意事项
- 确保表前缀正确:你的站点用的是
wp58_,所以所有表名都要加上这个前缀,不要直接用wp_ - 执行完所有SQL后,建议清理WooCommerce的缓存(比如在WordPress后台的WooCommerce > 状态 > 工具里清理缓存),否则优惠券可能不会立即显示
- 如果你不确定某个元数据的作用,可以先在WooCommerce后台手动创建一个优惠券,然后查看
wp_postmeta表中对应的记录,照着插入即可
内容的提问来源于stack exchange,提问作者OlaJens
相关产品推荐
相关产品推荐

