首页 > 解决方案 > 如果价格在 Woocommerce 3 中更新,则更改产品状态

问题描述

我需要在挂钩中更改产品 post_status。每次供应商更改价格时,我都试图让产品回到“待定”状态。

add_action( 'updated_post_meta', 'mp_sync_on_product_save', 10, 4 );
function mp_sync_on_product_save( $meta_id, $post_id, $meta_key, $meta_value ) {
    if ( $meta_key == '_price' ) { // edited price
        if ( get_post_type( $post_id ) == 'product' ) {
            $product = wc_get_product( $post_id );
            $product['post_status'] = 'pending'; //how to update this?
            // var_dump($product_id);var_dump($product);die('test');

        }
    }
}

谁能告诉我什么函数可以做到这一点:“$product['post_status'] ='pending';”?

标签: phpwordpresswoocommerceproductuser-roles

解决方案


如果“管理员”用户角色以外的任何人在后端更新产品价格,以下代码会将产品状态更改为待处理:

add_action( 'woocommerce_product_object_updated_props', 'change_status_on_product_object_updated_prices', 10, 2 );
function change_status_on_product_object_updated_prices( $product, $updated_props ) {

    $changed_props = $product->get_changes();

    if ( $product->get_status() !== 'pending' && ( in_array( 'regular_price', $updated_props, true ) ||
    in_array( 'sale_price', $updated_props, true ) ) && ! current_user_can( 'administrator' ) )
    {
        wp_update_post( array( 'ID' => $product->get_id(), 'post_status' => 'pending' ) );
    }
}

代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。

“管理员”用户角色不会受到代码的影响……您还应该检查“供应商用户角色无法更改产品发布状态。


推荐阅读