将数据库中的所有WooCommerce产品价格更新到小数点后2位

问题描述:

我的很多产品的价格都类似于£3.4560等。我需要它们在数据库中进行四舍五入和剥离。将数据库中的所有WooCommerce产品价格更新到小数点后2位

WooCommerce中2位小数的输出是不够的,无法使用Tax Toggle插件。

是否有数据库查询可以做到这一点?

我已经看到了舍入和截断的一些位,但不知道如何执行此操作,因为我的知识很差。

任何帮助表示赞赏。

+0

好的,下面的代码工作,并将数据库中的价格更改为2位小数。但是,要使插件正常工作,必须通过单击按钮来更新产品。我想这会刷新内容?所以我需要的是每个产品都要“更新”。 这是来自Tax Toggle的插件作者。 “我不确定你是如何进入Woo的产品,但看看这个过程,我发现任何产品一旦重新生成(更新),它就会起作用,所以这表明价格没有通过woocommerce save功能,因此导入不正确。“ –

更新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.

+0

感谢您的支持。按照您的说法完全保存代码时出现此错误。 '解析错误:语法错误,意外'2000'(T_LNUMBER),期待变量(T_VARIABLE)' –

+0

这不能完成我需要的任务。即使在编辑器中多次更新文件后,它也不会将产品价格更改为2位小数。价格仍然有4位小数。看到这里 - http://imgur.com/a/6SutJ @LoicTheAztec –

+0

感谢Loic!现在数据库中的价格已更改为2位小数。但是,要使它在前端工作,每个产品都必须使用更新按钮手动更新。你知道有什么方法可以一次更新所有产品吗? –