Я пытаюсь обновить настраиваемое поле (порядок) внутри POST при его сохранении. По моим логам все работает гладко, даже функция возвращает true, но значение не меняется так, как должно.
Вот мой код:
function update_on_save($post_id) {
error_log("fonction post_id :".$post_id);
// Enregistrement automatique = on sort
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if ($post_id && get_post_type($post_id) == 'post') {
if (in_category('Orquera Listings',$post_id)) {
$status = get_post_meta($post_id,'status', true);
error_log("status :".$status);
switch ($status) {
case 'Pending':
$order = 1;
break;
case 'For Sale':
$order = 2;
break;
case 'Sold':
$order = 3;
break;
default:
$order = 4;
}
error_log("order : ".$order);
$result = update_post_meta($post_id, 'order', $order);
error_log('result :'.$result);
}
}
}
add_action('save_post', 'update_on_save', 90,1);
Мои журналы дают мне:
Вот что я хочу: здесь порядок должен быть установлен на 3, но мои данные не обновляются.
Что я делаю не так?
Я пробовал много чего, даже пробовал использовать wp_after_insert_post, но до сих пор мое поле «заказ» не сдвинулось ни на дюйм.
Добавление параметров: $result = update_post_meta($post_id, 'order', $order,$old_order);
Изменение приоритета...
Редактировать :
Я попробовал это:
$wpdb->update($wpdb->prefix.'postmeta', array('meta_value' => $order), array('post_id' => $post_id,'meta_key' => 'order'));
$order_db = get_post_meta($post_id,'order', true);
error_log('order_db:'.$order_db);
Он показывает 3 по порядку. Я чувствую, что значение снова сохраняется, когда я обновляю форму. Поле «заказ» можно редактировать, но я хочу принудительно указать значение.
Чтобы внести ясность: я сохраняю сообщение и помещаю 30 в поле заказа, чтобы проверить его. Но это значение будет переопределено моим фрагментом благодаря save_post. Я чувствую, что он обновлен, но значение, которое я ввел в поле в BO, переопределяет его и после этого сохраняет его снова.
Изменение: add_action('save_post', 'update_on_save', 90, 1);
поскольку у вас в функции только один аргумент ($post_id), а не четыре! … Теперь это должно работать лучше.
@deemi-D-nadeem: Я уже это сделал, и значения указаны в моем посте. Да, значение существует в БД, это поле ACF.
@LoicTheAztec: я изменил его, но это ничего не изменило.
Мне удалось решить проблему, вот как я это сделал:
add_action('acf/save_post', 'my_acf_save_post', 5);
$status = $_POST['acf']['field_64a6b0ced7f03']; // to get a value
$_POST['acf']['field_66193c3aec000'] = $order; // to put a value inside the field
Сначала проверьте, что метаключ «order» существует в БД, затем проверьте значения, которые вы пытаетесь передать, $post_id, «order», $order.