WordPressで投稿を作成して公開する時刻になったらちゃんと公開できてるのかサイトにアクセスするなりチェックをすると思います。チェック作業を楽にするためにSlackを使って投稿された場合に通知する方法があります。
WordPressプラグインを探せば出てくるとは思いますが、ちょっとのコードで簡単に投稿ステータスの変更にあわせてSlackに通知することができるので今回はその方法を紹介します。
Slack APIでSlackアプリを作成する
まずはSlackに通知するためにSlack APIからSlackアプリを作成します。
次にApp NameにSlackアプリ名を入力してSlackアプリを適用するWorkspaceを選択して「Create App」ボタンを選択します。
これでSlackアプリが作成されました。
SlackアプリにWebhookを追加する
Slackアプリの作成は完了しましたが、アプリを作成しただけではWebhookを使うことが出来ません。Webhoookを使うための設定を行います。
作成したSlackアプリのページから「Incoming Webhooks」を選択してください。
次に「Activate Incoming Webhooks」の右にあるOn/Offスイッチをクリックして「On」にします。
そうするとWebhookの設定が有効になりWebhookの発行ができるになっているはずです。そこから少しスクロールしたところに「Add New Webhook to Workspace」ボタンがあるのでクリックします。
Webhookの通知先のチャンネルをどうするか選択する画面が出てくるので通知したいチャンネルを選択して「許可する」ボタンをクリックしてください。
これでWebhookのURLが発行されました。発行されるとこんな感じになっているはずです。発行されたWebhook URLは後で使うのでコピーしておいてください。
Webhook URLを使ってWordPressの投稿を通知する
Slackアプリで発行されたWebhook URLを使ってWordPressの投稿ステータスを見て通知します。WordPressの投稿ステータスでの処理はtransition_post_statusフックを使ってやります。
transition_post_statusフックについては下記の記事をみてください。
transition_post_statusフックを使って投稿のステータスが変わったタイミングで処理をする方法
以下のコードをWordPressテーマやプラグインに追加すればOKです。
function post_publish_slack_notifications($new, $old, $post) {
// 公開ステータスチェック
$statuses = ['publish'];
if (!in_array($new, $statuses, true)) {
return;
}
$webhook = 'https://hooks.slack.com/services/'; // コピーしたwebhook URLに変更
$text = $post->post_title;
wp_safe_remote_post(
$webhook,
[
'body' => wp_json_encode([
'text' => $text,
]),
'headers' => [
'Content-Type' => 'application/json',
]
]
);
}
add_action('transition_post_status', 'post_publish_slack_notifications', 10, 3);
上記のコードは投稿ステータスが公開(publish)になったときに$webhookに入っているWebhook URLをwp_safe_remote_post()を使ってPOSTリクエストで送っています。
$textには投稿タイトルをいれていますが、$postに入っているデータなら自由に記載することができます。下記のようにタイトルと投稿のURLを入れることもできたりします。
$text = $post->post_title . "\n" . get_permalink($post->ID);
まとめ
今回は、投稿ステータスの状態をみてSlackに通知するやり方を紹介しました。例では投稿ステータスを公開にした場合のみにしていますが、ステータス管理でやっているだけなので承認がいるような投稿だったりとかもフックをかえればできたりします。
実際にSlackアプリを作ることはちょっと敷居が高いかもしれませんが、簡単に作ることはできるのでSlackに通知したい用途がある場合にはおすすめです。