WordPressの記事投稿/更新時にDiscordへメッセージを送信する
DiscordにはWebhookという機能があり、指定されたURLにPOSTデータを送信するだけで簡単にメッセージを送信できます。今回はWordPressの記事を投稿した時と更新した時にDiscordへメッセージを送信させてみます。
事前準備
Discordのサーバーの設定もしくはチャンネルの設定画面で、左側のWebhooksからWebhookを作成します。このときに指定したチャンネルにメッセージが送信されます。
WordPressの設定
WordPressの管理画面のメニューから、外観→テーマの編集を開き、テーマのための関数(functions.php)を編集します。ファイルの末尾に次のコードを追記します。
- テーマの編集を一度もしたことがない場合は警告画面が表示されます。よく読み、納得した上で次の手順に進んでください。心配な方はテーマの複製を行っておくことをおすすめします。
コード
function post_discord($content,$embeds=null){
$jsonData=$embeds!==null?json_encode(array('content'=>$content,'embeds'=>$embeds)):json_encode(array('content'=>$content));
$ch=curl_init('Webhook URL');
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($ch,CURLOPT_POSTFIELDS,$jsonData);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$res=curl_exec($ch);
curl_close($ch);
return $res;
}
function post_notify($new,$old,$post){
if($new!=='publish')return;
switch($old){
case 'new':
case 'draft':
case 'pending':
case 'auto-draft':
case 'future':
post_discord('新規投稿',array(array('title'=>get_the_title($post),'url'=>get_permalink($post),'description'=>get_the_excerpt($post),'color'=>30719)));
}
}
function update_notify($new,$old,$post){
if($post->post_status!=='publish')return;
post_discord('記事更新',array(array('title'=>$post->post_title,'url'=>get_permalink($post->ID),'description'=>get_the_excerpt($post->ID),'color'=>30719)));
}
add_action('transition_post_status','post_notify',10,3);
add_action('post_updated','update_notify',10,3);
次回以降の記事投稿/更新時にDiscordにメッセージが送信されます。
その他
- 記事投稿時にpost_notify関数、記事更新時にupdate_notify関数が実行されます
- DiscordのEmbedsを使用しているため、記事のタイトルや抜粋が一緒に表示されます
- 記事の抜粋は、記事に抜粋が入力されている場合のみ表示されます
- 色指定は、16進数のカラーコードをRGBに分割せずにそのまま10進数に変換したものが使用できます(このコードでは#0077FF)。PHPを使用しているため、0x77ffでも大丈夫です