Измените статус продукта, если цены обновляются в 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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Роль пользователя "Администратор" не будет затронута кодом… Также следует проверить, что "Роль пользователя Продавца не может изменить статус публикации продукта.