WordPressで投稿を作成して公開する時刻になったらちゃんと公開できてるのかサイトにアクセスするなりチェックをすると思います。チェック作業を楽にするためにSlackを使って投稿された場合に通知する方法があります。

WordPressプラグインを探せば出てくるとは思いますが、ちょっとのコードで簡単に投稿ステータスの変更にあわせてSlackに通知することができるので今回はその方法を紹介します。

Slack APIでSlackアプリを作成する

まずはSlackに通知するためにSlack APIからSlackアプリを作成します。

Slack API

Create a custom appを選択する

次にApp NameにSlackアプリ名を入力してSlackアプリを適用するWorkspaceを選択して「Create App」ボタンを選択します。

App NameとWorkspaceを選択して作成

これでSlackアプリが作成されました。

SlackアプリにWebhookを追加する

Slackアプリの作成は完了しましたが、アプリを作成しただけではWebhookを使うことが出来ません。Webhoookを使うための設定を行います。

作成したSlackアプリのページから「Incoming Webhooks」を選択してください。

Incoming Webhooksを選択する

次に「Activate Incoming Webhooks」の右にあるOn/Offスイッチをクリックして「On」にします。

OffをOnにする

そうするとWebhookの設定が有効になりWebhookの発行ができるになっているはずです。そこから少しスクロールしたところに「Add New Webhook to Workspace」ボタンがあるのでクリックします。

「Add New Webhook to Workspace」を選択する

Webhookの通知先のチャンネルをどうするか選択する画面が出てくるので通知したいチャンネルを選択して「許可する」ボタンをクリックしてください。

チャンネルを選択して「許可する」ボタンをクリック

これでWebhookのURLが発行されました。発行されるとこんな感じになっているはずです。発行されたWebhook URLは後で使うのでコピーしておいてください。

発行されたWebhookのURLが表示される

Webhook URLを使ってWordPressの投稿を通知する

Slackアプリで発行されたWebhook URLを使ってWordPressの投稿ステータスを見て通知します。WordPressの投稿ステータスでの処理はtransition_post_statusフックを使ってやります。

transition_post_statusフックについては下記の記事をみてください。

transition_post_statusフックを使って投稿のステータスが変わったタイミングで処理をする方法

以下のコードをWordPressテーマやプラグインに追加すればOKです。

functions.php
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に通知したい用途がある場合にはおすすめです。