WordPressで投稿を公開するときに記事をTwitterにツイートしたり、Slackに通知したり、はたまたWEBフックを使ってJAMStackのビルドをしたりしたいことがあります。
そのためにWordPressでは投稿ステータスが変わったタイミングで動くtransition_post_statusフックがあります。
今回はtransition_post_statusフックの使い方を紹介します。
WordPressの投稿システムは記事を即時公開したタイミングや予約投稿のときの予約時刻の後のタイミングでWP-CRONやページアクセスのタイミングで投稿のステータスが変わるようになっています。また公開中の記事を非公開にしたタイミングも投稿ステータスの変更タイミングです。
そのように投稿のステータスが変更されるタイミングでtransition_post_statusフックが呼ばれます。
transition_post_statusフック
transition_post_statusフックには以下の3つの引数をコールバック関数に渡します。
引数名 | 説明 | 型 |
---|---|---|
new_status | 変更後の投稿ステータス | string |
old_status | 変更前の投稿ステータス | string |
posts | 投稿 | WP_Post |
この引数を使ってtransition_post_statusフックのコールバック関数作れば投稿のステータスが変わったタイミングで何かしらの処理ができるようになります。
投稿のステータスには以下のような種類があります。
ステータス | 説明 |
---|---|
new | 以前のステータスが存在しない。新規作成のとき |
publish | 投稿が公開済の状態 |
pending | 投稿が承認待ちの状態 |
draft | 投稿が下書きの状態 |
auto-draft | 投稿が自動保存で下書きの状態 |
future | 投稿が予約済の状態 |
private | 投稿が非公開の状態。ログイン済でないと表示されない。 |
inherit | 投稿に親が存在する状態。いわゆるリビジョンやサムネイル画像など。 |
trash | 投稿が削除されている状態 |
transition_post_statusフックを使ったサンプル
transition_post_statusフックを使ったサンプル関数を作ってみます。
function publish_post_transition($new_status, $old_status, $post) {
if ($new_status == 'publish' && $old_status != 'publish') {
// 何かしらの処理
}
}
add_action( 'transition_post_status', 'publish_post_transition', 10, 3);
上記のサンプルは、投稿のステータスが公開に変わったタイミングで何かしらの処理をするサンプルになります。公開以外のタイミングでは何も処理を行いません。
function trigger_post_transition($new_status, $old_status, $post) {
$statuses = ['publish', 'private', 'trash'];
if ( in_array($new_status, $statuses, true)) {
// 何かしらの処理
}
}
add_action( 'transition_post_status', 'trigger_post_transition', 10, 3);
上記は投稿のステータスが「公開」「非公開」「ゴミ箱」に入れたタイミングで何かしらの処理をするサンプルです。公開のタイミングだけではなく非公開やゴミ箱に入れたタイミングとかにも処理ができるようになります。
まとめ
今回は、transition_post_statusフックについて紹介しました。transition_post_statusフックを使えば投稿のステータスが変わったときにいろんな処理ができます。
またtransition_post_statusフック以外にも公開ステータスが変わったタイミングで処理をしたいみたいなことができたりするのでそちらについてはまた別に紹介します。