web-dev-qa-db-ja.com

WordPressプラグインにデータベースの変更をチェックさせて何かをする方法は?

たとえば、データベースに新しいコメントが書き込まれているかどうかを確認してから、変更があったことをプラグインに登録させるにはどうすればよいですか。この情報を使用して、後でプラグインを使用してデータベースで何かをします。

任意の助けをいただければ幸いです。この質問に関して何も見つかりませんでした。

2
slider2013

date列をチェックすることによって:

新しいコメント、新しい投稿などだけをチェックするには、cronジョブを作成してからcomment_datepost_dateなどをチェックして、それらのテーブルに新しいものがあるかどうかを確認します。 cronジョブから最後にチェックされたタイムスタンプを保存するので、最後にチェックされたタイムスタンプよりもdateが大きい行はすべて新しい挿入になります。

WordPress APIのフィルタ/アクションフックを使う:

データベースを変更する前後に、WordPressはいくつかのフィルタ/アクションフックを起動します。

通常、アクションフックはデータベースアクションが完了した後に起動されます。これらのフックはしばしばadded/update/updated/deleted/save/insertなどのような名前の接頭辞/接尾辞を持っています。

たとえば、コメントAPIは、データベースが変更された後に次のアクションフックを起動します。

  • wp_insert_comment:コメントがデータベースに挿入された後に発生します。
  • deleted_comment:コメントがデータベースから削除された後に発生します。
  • trashed_comment:コメントがゴミ箱に移動された後に発生します。
  • untrashed_comment:コメントがゴミ箱の外に移動された後に発生します。
  • spammed_comment:コメントがスパムとしてマークされた後に発生します。
  • unspammed_comment:(以前はspamとしてマークされていた)コメントがspamとしてマークされていない後に発生します。
  • edit_comment:コメントが更新/編集された後に発生します。
  • comment_closed:投稿がコメントを許可しないとマークされた後に発生します。

アクションフック付きのサンプルコード:

add_action( 'wp_insert_comment', 'wpse_comment_inserted' );
function wpse_comment_inserted( $comment_id, $comment_object, 99, 2 ) {
    // comment with id $comment_id is inserted into the database,
    // do something with it here
}

データベース変更の前後に実行される他の多くの フィルタフックアクションフック があります。必要に応じて使用してください。

これらのフックを使用する利点は、それらがWordPressコアの一部であるため、内部の変更について心配する必要がないということです。ただし、これらのコアAPIを使用しないプラグイン/テーマがあり、代わりにカスタム構築されたクエリを実行するという欠点があります。だからあなたはそれらからのDBの変更をキャッチすることができないでしょう。

queryフィルタフックを使うことで:

WordPressの$wpdb APIを通じて行われた挿入/更新/削除クエリを追跡することも可能です。 WordPressデータベースAPIを使用するデータベースクエリはすべて$wpdbwpdbクラスのインスタンス)を使用します。すべてのクエリ(挿入、更新、削除を含む)は query filter hook を起動します。そのため、このフックを使用すると、実行される直前にすべてのクエリをフィルタリングできます。

ただし、WordPressの$wpdb APIの外部でテーマ/プラグインがカスタムDBクエリを作成した場合や、プラグインがロードされる前にコアクエリが実行された場合、または外部アプリケーションがカスタムSQLクエリを介して変更を行った場合は機能しません。

wpdbクラスを拡張することによって:

また、 db.php)ファイルをwp-content ディレクトリに作成し(またはプラグインからwp-contentにソフトリンクを作成し)、そこからwpdbクラスを拡張することもできます。このようにして、wpdbクラスの任意のメソッドを拡張し、そこから挿入/更新/削除クエリを追跡することができます。

データベーストリガーを使用して:

ただし、SQLクエリによるデータベースの変更を追跡するには、プラグインのアクティブ化時に triggers を作成してからトリガーを介してデータベースの変更を追跡するのが唯一の信頼性の高い完全な方法です。ただし、プラグインからこれを行うには、WordPressに使用しているデータベース資格情報にcreate/dropトリガ権限が必要です。

_(注意:トリガが多すぎるとDBクエリが遅くなる可能性があります。また、プラグインの無効化時にトリガをクリーンアップするようにしてください。

5
Fayaz

コメントがコメント投稿者によって保存された(投稿された)ときに何かしたい場合は、preprocess_commentフィルタを使用します( プラグインAPI /フィルタリファレンス/ preprocess comment を参照)。

function preprocess_comment_handler( $commentdata ) {
    //some code
    return $commentdata;
}
add_filter( 'preprocess_comment' , 'preprocess_comment_handler' );

コメントが保存されたときに何をしたいのかについてのコードを追加するだけです。このコードブロックをfunctions.phpに配置します(子テーマにします。テーマの更新によってコードが上書きされることはありません)。

2
Rick Hellewell