見出し画像

DBの値が更新されていたらメール通知をするプラグインを作成する[WordPress]

DBのある値が更新されたことを検出し、メール通知をするプラグインを作ってみたので紹介します。

大まかな流れ

①プラグインファイルを作成

②ファイルに処理(DBの中身を確認してメールを送信する)を書く

③プラグイン有効化時に②の処理がWordPressのスケジュールに追加されるようにする

というのが大まかな流れです。

1.プラグインファイルを作成する

1.1ファイル作成

今回は、別プラグインを導入して使っているWeb拍手ボタンがクリックされたらメールを送る、というプラグインを作ってみます。

WordPress のプラグインディレクトリ wp-content/plugins/に、プラグイン用のフォルダを作成します。フォルダのなかにメインとなるphpファイルも作成しましょう。

プラグインフォルダ名: hakusyu-tuuchi

プラグインファイル名:hakusyu-tuuchi.php

つまり、wp-content/plugins/hakusyu-tuuchi/hakusyu-tuuchi.php というファイル階層になります。

1.2ファイルヘッダーを書きこむ

プラグインファイル(hakusyu-tuuchi.php )にヘッダー情報を書き込みます。

このヘッダーが非常に重要で、WordPressはこれによってプラグインを認識し、プラグインの管理画面に表示させます。

<?php
/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: (ライセンス名の「スラッグ」 例: GPL2)
*/
?>

とはいえすべてを書く必要はありません。今回は最低限のことを記入しました。

<?php
/*
Plugin Name: hakusyu-tuuchi 
Description: Web-clapのプラグインでコメントが入力された場合に通知する
Version: 1.0.0
*/
?>

この時点でダッシュボードのプラグイン一覧に表示されるはずです。

2.処理(DBの中身を確認してメールを送信するコード)を書く

2.セキュリティ用のコードを1行追加

まずヘッダーコメントの下に下記の一行を書いておきます。これによって外部からファイルに直接アクセスされた場合に実行されることを防ぎます。

if ( ! defined( 'ABSPATH' ) ) exit;

2.2 DBの中身を確認してメールを送信する処理を書く

具体的な処理を書いていきますが、ここではwebhakusyu_tuuchi_mailというfunctionを作成し、その中に処理を書きます。

function webhakusyu_tuuchi_mail() {
  // wpdbオブジェクト
  global $wpdb;
 
  //デバッグ用
  $wpdb->show_errors(); 
 
  // SQL
  $sql = $wpdb->prepare("
  SELECT `post_title` ,  `clap_name` ,  `clap_comment` ,  `clap_datetime` 
  FROM `view_webclap_pagename` 
  WHERE `clap_comment` !=  '' AND 
  `clap_datetime` >= SYSDATE( ) - INTERVAL 12 HOUR 
  ORDER BY `clap_datetime` DESC 
  ");
 
  // クエリ実行
  $rows = $wpdb->get_results($sql);
  //エラー発生時
  $tmp ='';
  if($wpdb->print_error() != null){
      $tmp .= $wpdb->print_error();
  }
  
  //メール本文作成
  if (!$rows){
      //データなし
  }else{
  }{
      foreach ( $rows as $row ){
          $tmp .= 
'------------------------------------    
時間:'.$row->clap_datetime.'
記事名:'.$row->post_title.'
名前:'.$row->clap_name.'
コメント:'.$row->clap_comment.'
------------------------------------
';
      }
  }
  
  //キャッシュのクリア
  $wpdb->flush();
  
  // メール送信処理
  if( $tmp !=''){
      wp_mail( 'xxxxx@xxxxxx.com', 'webcplap from the site', $tmp );
  }
}

コメントを見るとだいたいわかると思いますが、2~24行目がDB処理、それ以降がメール送信処理です。

SQL文、メールの文面は目的に合うように置き換えてください。

このSQLでは'view_webclap_pagename’というビューに過去12時間以内に作成されたデータがあればデータを取得し、メールを送信するようにしています。

3.プラグインが有効化されたらWordPressのスケジュール処理に追加、無効化されたらスケジュールから削除する処理を追加

最後に、2.で作成した関数webhakusyu_tuuchi_mailを、WordPressのスケージュールに組み込みます。

// スケジュール登録処理------------------------------

//プラグイン有効化時
register_activation_hook(__FILE__, 'my_activation');
add_action('my_hourly_event', 'webhakusyu_tuuchi_mail');
function my_activation() {
	wp_schedule_event(time(), 'twicedaily', 'my_hourly_event');
}

//プラグイン無効化時
register_deactivation_hook(__FILE__, 'my_deactivation');
function my_deactivation() {
	wp_clear_scheduled_hook('my_hourly_event');
}

プラグイン有効化時のフックregister_activation_hookで、’my_activation'という処理を組み込んでいます。

my_activationではワードプレスのスケジュールに日に2回(つまり12時間置き)に、my_hourly_eventとしてwebhakusyu_tuuchi_mailを行うように記述します。

プラグイン無効化時のフックregister_deactivation_hookで、このmy_hourly_eventを削除するように記述しています。

これでコーディングは終わりです。


プラグインを有効化する

プログラムの記述が終わったら、最後にダッシュボードからプログラムを有効化すれば動き出します。

今回作成したプラグインコード

最後に、今回作成したプラグインコードの全体を載せておきます。

<?php
/*
Plugin Name: hakusyu-tuuchi
Plugin URI: 
Description: Web-clapのプラグインでコメントが入力された場合に通知する
Version: 1.0.0
*/
?>
<?php
if ( ! defined( 'ABSPATH' ) ) exit;
function webhakusyu_tuuchi_mail() {
  // wpdbオブジェクト
  global $wpdb;
 
  //デバッグ用
  $wpdb->show_errors(); 
 
  // SQL
  $sql = $wpdb->prepare("
  SELECT `post_title` ,  `clap_name` ,  `clap_comment` ,  `clap_datetime` 
  FROM `view_webclap_pagename` 
  WHERE `clap_comment` !=  '' AND 
  `clap_datetime` >= SYSDATE( ) - INTERVAL 12 HOUR 
  ORDER BY `clap_datetime` DESC 
  ");
 
  // クエリ実行
  $rows = $wpdb->get_results($sql);
  //エラー発生時
  $tmp ='';
  if($wpdb->print_error() != null){
      $tmp .= $wpdb->print_error();
  }
  
  //メール本文作成
  if (!$rows){
      //データなし
  }else{
  }{
      foreach ( $rows as $row ){
          $tmp .= 
'------------------------------------    
時間:'.$row->clap_datetime.'
記事名:'.$row->post_title.'
名前:'.$row->clap_name.'
コメント:'.$row->clap_comment.'
------------------------------------
';
      }
  }
  
  //キャッシュのクリア
  $wpdb->flush();
  
  // メール送信処理
  if( $tmp !=''){
      wp_mail( 'xxxxx@xxxxxx.com', 'webcplap from the site', $tmp );
  }
}
  
// スケジュール登録処理------------------------------
//プラグイン有効化時
register_activation_hook(__FILE__, 'my_activation');
add_action('my_hourly_event', 'webhakusyu_tuuchi_mail');
function my_activation() {
    wp_schedule_event(time(), 'twicedaily', 'my_hourly_event');
}
//プラグイン無効化時
register_deactivation_hook(__FILE__, 'my_deactivation');
function my_deactivation() {
    wp_clear_scheduled_hook('my_hourly_event');
}


この記事が気に入ったらサポートをしてみませんか?