2023.09.19
WordPressの記事投稿時にTeamsへ通知を送信する方法
Takaです。
今回はWordPressの記事投稿時にTeamsへ通知を送信する方法を書きます。
実装方法
■用意するもの
・組織用のTeamsアカウント または Slackのアカウント
・Webhook URL (teamsまたはslackのいずれか)
・WordPress
・wp-cronを実行できる環境
まず初めにTeamsアカウントなどを取得し、
WebhookURLをだします。
今回はTeamsでの手順を簡単にご紹介します。
まずTeamsの画面で通知を送信したいチャンネルの3点リーダーをクリックし「コネクタ」を押下します。
次に「Incoming Webhook」の構成(または追加)ボタンを押下します。
この際初めての場合はそのあと追加をさらに押してください。
その後初めからやり直すと構成ボタンが出現します。
適当な名前を付けて、
作成ボタンを押します。
そうするとURLが発行されるので、
コピーをして保管し、完了を押下でURLの生成は終了です。
こちらは後々に通知先の設定で使用します。
次にWordPress側での実装を行います。
今回は記事投稿時に指定のWebhook URLで通知を送信する形となります。
functions.phpに以下のように記載します。
function schedule_delayed_event($new_status, $old_status, $post) {
if ($new_status == 'publish' && $old_status != 'publish') {
// 記事公開後5秒後に 'send_notification_cron' アクションを実行する
wp_schedule_single_event(time() + 5, 'send_notification_cron', array($post->ID));
}
}
add_action('transition_post_status', 'schedule_delayed_event', 999, 3);
function send_notification() {
$post_id = func_get_arg(0); // スケジュールイベントから渡された引数を取得
$webhook_url = "Webhook URLを入れてください";
// Webhook URLが設定されている場合
if (!empty($webhook_url)) {
// 通知の内容を設定
$message = array(
'text' => '記事が公開されました! タイトル:'.get_the_title($post_id).' URL:' . get_permalink($post_id),
);
// 通知を送信
$args = array(
'body' => json_encode($message),
'headers' => array('Content-Type' => 'application/json'),
);
wp_remote_post($webhook_url, $args);
}
}
add_action('send_notification_cron', 'send_notification');
何をしているかというと、
公開記事かつ前回のステータスが公開以外のものが投稿されたら、
それをフックに5秒後に通知するようにwp-cronに登録します。
なぜわざわざ一旦wp-cronに登録するかというと、
カスタムタクソノミー等を設定している場合、
新規投稿時のフックでカスタムタクソノミーの中身を拾えないためです。
今回は特にカスタムタクソノミーを使用するコードは書いてないですが、
そういったケースもあったため、このようにしております。
新規作成→下書き→公開
の手順を踏んだ場合はこの限りではありません。
今回はTeamsのWebhook URLを記載しましたが、
“Webhook URLを入れてください”の部分をSlackのWebhook URLに変更すればSlackに送信されるようになります。
以上Takaでした。