Обновление поста Wordpress не обновляет postmeta с помощью крючка wordpress

Я хочу обновить значение postmeta для сообщения с помощью ловушки wordpess, но я не могу его обновить. Вот мой код,

function check_values($post_ID, $post_after, $post_before){

     $oldFob = get_post_meta( $post_ID, 'price', true);
     if($oldFob){
         update_post_meta( $post_ID, 'price', 500);
     }else{
         add_post_meta( $post_ID, 'fob-price', 500 , true);
     }
   }

 add_action( 'post_updated', 'check_values', 10, 3 );

Когда я ставлю die вскоре после update_post_meta и проверяю базу данных, она работает, но после возвращения к редактированию страницы сообщения она возвращается.

По сути, это обновление метаданных сообщения, но после этого выполняется еще одна функция WordPress по умолчанию, которая сбрасывает ее на старое значение.

Любое экспертное предложение, почему это происходит так ??


person Maha Dev    schedule 01.05.2019    source источник


Ответы (1)


Проблема в том, что хук post_updated срабатывает до фактического сохранения метаданных поста.

Таким образом, в основном вы обновляете метаданные поста, а сразу после этого пост обновляется мета-значениями, отправленными в запросе.

Чтобы решить эту проблему, вы можете использовать хук save_post с большим числом для приоритета, чтобы хук запускался последним:

add_action('save_post', function ($post_ID) {
    $oldFob = get_post_meta( $post_ID, 'price', true);

    if ($oldFob) {
        update_post_meta( $post_ID, 'price', 500);
    } else {
        add_post_meta( $post_ID, 'fob-price', 500 , true);
    }
}, 100);

Для получения дополнительной информации: https://codex.wordpress.org/Plugin_API/Action_Reference/save_post

person Chin Leung    schedule 01.05.2019
comment
Это сработало для меня. Большое спасибо!!!. Не могли бы вы скинуть мне ссылку, где есть заказ крючков - person Maha Dev; 02.05.2019
comment
@MahaDev Вы можете взглянуть на это: codex.wordpress.org/Plugin_API/Action_Reference - person Chin Leung; 02.05.2019