将数据库中的所有WooCommerce产品价格更新到小数点后2位
我的很多产品的价格都类似于£3.4560
等。我需要它们在数据库中进行四舍五入和剥离。将数据库中的所有WooCommerce产品价格更新到小数点后2位
WooCommerce中2位小数的输出是不够的,无法使用Tax Toggle插件。
是否有数据库查询可以做到这一点?
我已经看到了舍入和截断的一些位,但不知道如何执行此操作,因为我的知识很差。
任何帮助表示赞赏。
更新2:(添加一些代码来清除所有相关产品的瞬时高速缓存)
下面是一些代码,将更新所有的产品价格(之前进行数据库备份):
global $wpdb;
$postmeta = $wpdb->prefix . "postmeta";
$posts = $wpdb->prefix . "posts";
// 1. First query: Get all prices
$results = $wpdb->get_results("
SELECT $postmeta.*
FROM $postmeta
INNER JOIN $posts ON $postmeta.post_id = $posts.ID
WHERE $posts.post_type LIKE '%product%'
AND $postmeta.meta_key LIKE '%price%'
AND $postmeta.meta_value != ''
ORDER BY $postmeta.meta_id ASC
");
// iterating through each price and update it
foreach($results as $result){
$meta_id = $result->meta_id;
$post_id = $result->post_id;
$meta_key = $result->meta_key;
$meta_value = number_format($result->meta_value, 2);
// 2. Udating prices query
$wpdb->query($wpdb->prepare("
UPDATE $postmeta
SET meta_id = $meta_id, post_id = $post_id, meta_key = '$meta_key', meta_value = '$meta_value'
WHERE $postmeta.meta_id = %d
", $meta_id));
// 3. Clear all related product transient cached data (refresh prices)
wc_delete_product_transients($post_id);
}
代码会出现在您的活动子主题(或主题)的function.php文件中,也可能位于任何插件文件中。
Once saved, just browse any page of your site, check your database wp_postmeta table searching for
‰price‰ LIKE meta_key
. Now you can remove this code.
感谢您的支持。按照您的说法完全保存代码时出现此错误。 '解析错误:语法错误,意外'2000'(T_LNUMBER),期待变量(T_VARIABLE)' –
这不能完成我需要的任务。即使在编辑器中多次更新文件后,它也不会将产品价格更改为2位小数。价格仍然有4位小数。看到这里 - http://imgur.com/a/6SutJ @LoicTheAztec –
感谢Loic!现在数据库中的价格已更改为2位小数。但是,要使它在前端工作,每个产品都必须使用更新按钮手动更新。你知道有什么方法可以一次更新所有产品吗? –
好的,下面的代码工作,并将数据库中的价格更改为2位小数。但是,要使插件正常工作,必须通过单击按钮来更新产品。我想这会刷新内容?所以我需要的是每个产品都要“更新”。 这是来自Tax Toggle的插件作者。 “我不确定你是如何进入Woo的产品,但看看这个过程,我发现任何产品一旦重新生成(更新),它就会起作用,所以这表明价格没有通过woocommerce save功能,因此导入不正确。“ –