Измените статус продукта, если цены обновляются в Woocommerce 3 - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно изменить продукт 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 Ответ

0 голосов
/ 25 октября 2018

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

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

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

...