从 WooCommerce 管理员中的所有产品中删除销售价格

Posted

技术标签:

【中文标题】从 WooCommerce 管理员中的所有产品中删除销售价格【英文标题】:Remove Sale Price from all products in WooCommerce admin 【发布时间】:2015-01-20 15:08:39 【问题描述】:

寻找一种方法从 woocommerce 中的所有产品中删除销售价格。管理员的视野有限,因此对于拥有超过 10,000 种产品的网站,手动删除销售价格可能是一项非常繁琐的任务。

这个可以吗?

【问题讨论】:

那你想做什么?它们是非常不同的问题。仅在循环中显示促销商品see this 我想做第一个选项,但如果做不到,我想看看我店里所有的销售商品。目前,仪表板中的产品列表没有提供按销售过​​滤的选项,因此我有 1000 多种产品无法管理销售:/ 【参考方案1】:

您可以在产品管理员上批量修改销售价格。

或者你可以暂时把它放到你的functions.php中......加载一次管理员,然后删除。 (未经测试,因此使用风险自负)

function so_28048702_update()
    // in theory this will grab all variations FIRST
    $args = array( 'post_type' => array( 'product','product_variation' ), 'nopaging' => true, 'sortby' => 'post_type', 'order' => 'desc' );

    $all_products = new WP_Query( $args );

    if ( $all_products->have_posts() ) : 
    while ( $all_products->have_posts() ) : 

        $all_products->the_post();
        $id = get_the_ID();
        update_post_meta( $id, '_sale_price', '' );
        $regular_price = get_post_meta( $id, '_regular_price', true );
        update_post_meta( $id, '_price', $regular_price );

        // we're on a variable product
        if( has_term( 'variable', 'product_type', $id ) )
           variable_product_sync( $id );
        

    endwhile;
    endif;

    wp_reset_postdata();


add_action( 'admin_init', 'so_28048702_update' );

【讨论】:

谢谢 Helga,仅使用此代码会有多大风险? 风险在于我可能会留下某种印刷错误。它看起来不错,但我还没有尝试过。拼写错误会导致致命错误(白屏),但只要您可以通过 FTP 访问您的站点并且可以删除此代码并快速恢复。如果您有很多具有促销价的商品,我们可能还需要将 _price 字段设置为 _regular_price 值......实际上这可能是真的,所以我会继续编辑它。最后,如果您有很多正在销售的变体,则需要重新同步可变产品(只需重新保存)。 当您说“需要重新同步可变产品”时。您的意思是我必须浏览每个产品并逐个更新它们,以触发该产品的缓存清除形式吗?因为有 2000 多种产品在售,都是可变的。 它本身不是缓存。 WC 查看所有变化并将最高和最低变化价格保存为父级的数据......以便它可以获得价格字符串。所以,是的,你需要重新保存变量 products 来触发它。有几个选项: 1. 使用批量编辑,一次做几百个。 2. 再次运行此脚本,但修改为仅查询变量 product,初始化 $product 对象并触发同步或 3. 假设变体始终具有高于其父代的 ID,因此我们可以调整上述内容。跨度> 我昨晚在那里做选项 A,一次浏览 200 种产品,进入每个销售项目并保存它们。由于某种原因,批量编辑不会像更新页面那样触发它。我很想有一个脚本来更新所有页面,而我不需要花一个小时用手敲击模式,所以我忘记了我只是那里的数据猴子。【参考方案2】:

第 1 步: 删除折扣价格数据:

DELETE FROM wp_postmeta WHERE meta_key IN ('_sale_price', '_sale_price_dates_to', '_sale_price_dates_from', '_price');

第 2 步:根据正常价格插入产品价格

INSERT INTO wp_postmeta SELECT NULL, post_id, '_price', meta_value FROM wp_postmeta WHERE meta_key = '_regular_price';

为什么是数据库查询?

在我的情况下,我有

SELECT COUNT(*) FROM marin2_postmeta WHERE meta_key = '_price';
+----------+
| COUNT(*) |
+----------+
|    10213 |
+----------+
1 row in set (0.03 sec)

【讨论】:

【参考方案3】:

您可以通过函数文件中的以下代码从产品中完全删除销售徽章。

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );

【讨论】:

这只是隐藏了促销快讯,它不会通过删除促销价来改变产品价格。为了避免混淆,我已经详细说明了这个问题

以上是关于从 WooCommerce 管理员中的所有产品中删除销售价格的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WooCommerce 产品属性分类中获取术语?

Woocommerce - 试图在管理员中获得可变产品数量总和

Woocommerce rest api为客户获取所有产品

获取 WooCommerce 中的所有产品类别

通过 WooCommerce 管理员电子邮件通知中的“woocommerce_email_order_meta”挂钩显示产品自定义字段

Woocommerce 显示每个类别及其产品