【问题标题】:Woocommerce MySQL to update price of products in specific categoryWoocommerce MySQL 更新特定类别产品的价格
【发布时间】:2018-01-31 04:58:53
【问题描述】:

我正在尝试将特定类别中的某些产品的价格提高一定百分比。我想出了应该工作的 select 语句,但是在将它与 update 语句结合起来时遇到了麻烦。这是我所拥有的:

SELECT * from `wp_term_relationships` where term_taxonomy_id=376 and object_id in(select ID from `wp_posts` where `post_type`='product' and     post_status='publish' and ID=wp_term_relationships.object_id) 

这为我提供了我需要的产品。我可以在这些产品上运行更新(如下所示)还是需要以某种方式将它们组合起来?

update wp_postmeta set meta_value = meta_value * 1.40 where meta_key='_regular_price'

【问题讨论】:

  • 您还需要更新“_price”(有效价格),并且您需要删除临时缓存(如果没有,您将看到旧产品价格,即使它们已在数据库中更新)。
  • 明白。我想了很多,但谢谢!如何对从第一个 SELECT 查询返回的产品 ID 运行该更新?
  • 我以前也做过类似的。 HERE 和 HERE(可能是其他人......)......首先你得到 ID,然后你用这些 ID 更新(见链接)。但我不是 SQL 专家

标签: mysql wordpress woocommerce


【解决方案1】:

这是一个 MySQL 查询,可以满足您的目的。

更新_regular_price

UPDATE 
    `wp_postmeta` 
SET 
    `meta_value` = ROUND(`meta_value` * 1.40, 2) 
WHERE 
    meta_key = '_regular_price' 
    AND `post_id` IN (
        SELECT 
            `object_id` AS product_id 
        FROM 
            `wp_term_relationships` 
        WHERE 
            term_taxonomy_id = 376
            AND `object_id` IN (
                SELECT 
                    `ID` 
                FROM 
                    `wp_posts` 
                WHERE 
                    `post_type` = 'product' 
                    AND `post_status` = 'publish' 
                    AND `ID` = `object_id`
            )
    );

更新_price

UPDATE 
    `wp_postmeta` 
SET 
    `meta_value` = ROUND(`meta_value` * 1.40, 2) 
WHERE 
    meta_key = '_price' 
    AND `post_id` IN (
        SELECT 
            `object_id` AS product_id 
        FROM 
            `wp_term_relationships` 
        WHERE 
            term_taxonomy_id = 376
            AND `object_id` IN (
                SELECT 
                    `ID` 
                FROM 
                    `wp_posts` 
                WHERE 
                    `post_type` = 'product' 
                    AND `post_status` = 'publish' 
                    AND `ID` = `object_id`
            )
    );

您还必须删除 WooCommerce 产品价格缓存,该缓存存储在 _transient_timeout_wc_var_prices_{{post_id}} 和 option_name

下 _transient_wc_var_prices_{{post_id}} 下的 wp_options 表中
DELETE
FROM `wp_options`
WHERE (`option_name` LIKE '_transient_wc_var_prices_%'
    OR `option_name` LIKE '_transient_timeout_wc_var_prices_%')

上面的查询已经过测试并且对我有用。

在运行此查询之前,请备份数据库

希望这会有所帮助!

【讨论】:

  • @Lance 我正在尝试做类似的事情,除了我想按百分比更新所有价格,您是否每次修改代码以实现此目的。
  • 嗨@rogue39nin,这是您想要实现的目标吗? stackoverflow.com/questions/45484681/…
  • 感谢查询似乎在改变价格,但不知何故该网站仍然返回旧价格,我尝试在 wp_postmeta 中查找 _price 并返回新价格,如果我缺少某些东西,请帮忙。
  • @ahmed:你删除了瞬态的吗?我刚刚使用最新版本的 WC 和 WP 进行了测试,一切正常。
【解决方案2】:

还有另一种很酷的方法可以在不接触 MySQL 的情况下做到这一点。

查看 WordPress Bulk Edit

更改Screen Options 以显示您拥有的所有产品。如果您有很多产品,那么您可以按页进行 500 次。

全选 -> Bulk Options (edit) -> Select a Category 和 应用

它还允许您按固定金额或百分比提高所有商品的价格。我希望这对某人有所帮助。

不如 MySQL 灵活,但在某些情况下表现出色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2021-07-22
    • 2018-03-10
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多