WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

Как исправить, что бы при использовании wp_update_post не перезаписывались кастомные поля ACF?

Написал функцию — товары по выборке меняют статус в зависимости от совпадения установки чекбоса и определенного события:

add_action('init', 'my_func_on_save_post');
function my_func_save_post() {
	foreach( get_posts($args) as $post ){//$args параметры выборки товаров
		$post_id=$post->ID;
		$products = get_post_meta( $post_id, 'my_checkbox', true );//данные установок чекбокса
			if ( get_post_status($post_id) == 'pending') {
			  $post_pub = array();
			  $post_pub['ID'] = $post_id;
			  $post_pub['post_status'] = 'publish';
			  wp_update_post( wp_slash($post_pub) );
			}
			foreach ( $products as $key ) {//при совпадении чекбокс==событие меняется статус
				if ($key == $my_parametr && get_post_status($post_id) != 'pending' && get_post_status($post_id) != 'draft'){
					$post_pen = array();
					$post_pen['ID'] = $post_id;
					$post_pen['post_status'] = 'pending';
					wp_update_post( wp_slash($post_pen) );
				}
			break;
		}
	}
}

Все работает — товары статус меняют.

Но не могу побороть, что при сохранении изменений товара, находящийся в режиме pending или draft, переписываются кастомные поля ACF у всей группы товаров из выборки по $args, данными ACF того товара который обновляешь.

Сейчас делаю необходимые изменения, только когда товары в режиме publish.

Погуглил, проблема в том, что:

This is because when you are updating the post the wp_insert_post function is used and there is "save_post" action hook which is usually used for saving custom fields data.

Перепробовал несколько вариантов, весь вечер этому посвятил, но так и не решил это момент.

Подскажите, люди добрые.

0
2 месяца назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация