Update_post_meta не работает в хуке save_post

Я пытаюсь обновить настраиваемое поле (порядок) внутри 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);

Мои журналы дают мне:

  • функция post_id: 47377
  • Статус: Продано
  • заказ: 3
  • результат :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, переопределяет его и после этого сохраняет его снова.

Сначала проверьте, что метаключ «order» существует в БД, затем проверьте значения, которые вы пытаетесь передать, $post_id, «order», $order.

deemi-D-nadeem 15.04.2024 16:40

Изменение: add_action('save_post', 'update_on_save', 90, 1); поскольку у вас в функции только один аргумент ($post_id), а не четыре! … Теперь это должно работать лучше.

LoicTheAztec 15.04.2024 23:05

@deemi-D-nadeem: Я уже это сделал, и значения указаны в моем посте. Да, значение существует в БД, это поле ACF.

david simon 17.04.2024 12:09

@LoicTheAztec: я изменил его, но это ничего не изменило.

david simon 17.04.2024 12:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось решить проблему, вот как я это сделал:

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

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