WordPress’in gönderi yayınlanınca çalışan kancası publish_post
tüm eski ve yeni gönderilerde çalışır, yani bir gönderiyi düzenleyip yayınladığınızda da çalışır.
Bazen sadece yeni girilmiş bir gönderide çalışmasını istediğiniz fonksiyonlar olabilir bu durumda transition_post_status
kancasını kullanmak mantıklı ve kolay. developer.wordpress.org/reference/hooks/transition_post_status/
Örnek:
if (
$old_status == $new_status ||
($old_status != "publish" && $new_status != "publish")
){
return;
}
Yukarıdaki örnek gönderinin daha önce yayınlanmamış olduğunu kontrol eder ve eğer daha önce yayınlanmış bir gönderi ise çalışmaz, bunu şöyle örneğin kullanabiliriz:
add_action('transition_post_status',
function( $new_status, $old_status, $post ){
if ( $new_status == 'publish' && $old_status != 'publish' ){
$author = "foobar";
$message = "Yeni bir gönderi yayınlandı.";
wp_mail($author, "Sitede yeni gönderi", $message);
}
}, 10, 3 );
Yukarıdaki örnekte siteye yeni bir gönderi eklendiğinde(veya sayfa ya da herhangi bir gönderi) $author’a mail gönderiyor.
post_type
kullanarak gönderi tipine göre ayrıştırılabilir zira bu fonksiyonla siteye girilen ve yayınlanan sayfa, özel gönderi tipi, ürün herhangi bir şey için çalışır, if’e aşağıdaki eklenirse sadece post tipi gönderi
if (get_post_type($post) !== 'post')