Единоразовое срабатывание команды при наличии мета, публикации, републикации в WordPress

Уважаемые специалисты.

Хочу прикрутить отсылку пуш сообщений при наступлении событий. Написал вот такой код, но что-то он не срабатывает должным образом. В чём моя ошибка?

UPD: кажется я понял, в чём дело. У меня мета добавляется в момент создания поста, и не срабатывает, потому что её ещё нет. Как это можно обойти?

add_action('transition_post_status', 'send_new_post', 10, 3);

function send_new_post($new_status, $old_status, $post) {
    
    $pubpost = get_post_time();
    $uppost = get_post_modified_time();
    $idpost = get_the_ID();
    $valuem = get_post_meta( $idpost, "anonsing", true );
    
    
  if('publish' === $new_status && 'publish' === $old_status && $post->post_type === 'post') {
      

    if ($pubpost == $uppost && get_post_meta($idpost, "anonsing", true)) {
// должно срабатывать если пост был был реопубликован (у него дата создания и дата изменения полностью совпадает (плагин републикации так делает), ранее пост был в статусе опубликован, наличествует ключ под именем "anonsing" (значение ключа значение не имеет))
    }  

  }
  
    if('publish' === $new_status && 'publish' === $old_status && $post->post_type === 'post') {
     
   if ('now' == $valuem) {
// должно срабатывать если пост был был отредактирован (ранее пост был в статусе опубликован, наличествует значение ключа "anonsing", которое должно быть "now")
    }  

  }
  
    if('publish' === $new_status && 'publish' !== $old_status && $post->post_type === 'post') {
        if ('express' == $valuem) {
// должно срабатывать если пост был был создан и сразу опубликован (ранее пост был не был в статусе опубликован, наличествует значение ключа "anonsing", которое должно быть "express")
}
        }
  
}

Ответы (1 шт):

Автор решения: Vadizar

Я бы советовал завязаться на хук draft_to_publish – он будет срабатывать единоразово при публикации поста. Тогда можно ваши условия удалить и скрипт должен срабатывать корректно.

Также можно применить хук save_post, но он будет срабатывать каждый раз после сохранения поста, даже черновика. Чтобы этого избежать, примените условие if ($post->post_status == 'publish').

→ Ссылка