Измените статус продукта, если цены обновляются в 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';"?

1 ответ

Решение

Следующий код изменит статус продукта на ожидающий, если кто-либо, кроме роли "администратор", обновит цены продукта в бэкэнде:

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 вашей активной дочерней темы (или активной темы). Проверено и работает.

Роль пользователя "Администратор" не будет затронута кодом… Также следует проверить, что "Роль пользователя Продавца не может изменить статус публикации продукта.

Другие вопросы по тегам