Единоразовое срабатывание команды при наличии мета, публикации, републикации в 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 шт):
Я бы советовал завязаться на хук draft_to_publish – он будет срабатывать единоразово при публикации поста. Тогда можно ваши условия удалить и скрипт должен срабатывать корректно.
Также можно применить хук save_post, но он будет срабатывать каждый раз после сохранения поста, даже черновика. Чтобы этого избежать, примените условие if ($post->post_status == 'publish').