たとえば、データベースに新しいコメントが書き込まれているかどうかを確認してから、変更があったことをプラグインに登録させるにはどうすればよいですか。この情報を使用して、後でプラグインを使用してデータベースで何かをします。
任意の助けをいただければ幸いです。この質問に関して何も見つかりませんでした。
date
列をチェックすることによって:新しいコメント、新しい投稿などだけをチェックするには、cronジョブを作成してからcomment_date
、post_date
などをチェックして、それらのテーブルに新しいものがあるかどうかを確認します。 cronジョブから最後にチェックされたタイムスタンプを保存するので、最後にチェックされたタイムスタンプよりもdate
が大きい行はすべて新しい挿入になります。
データベースを変更する前後に、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を使用するデータベースクエリはすべて$wpdb
wpdb
クラスのインスタンス)を使用します。すべてのクエリ(挿入、更新、削除を含む)は query
filter hook を起動します。そのため、このフックを使用すると、実行される直前にすべてのクエリをフィルタリングできます。
ただし、WordPressの$wpdb
APIの外部でテーマ/プラグインがカスタムDBクエリを作成した場合や、プラグインがロードされる前にコアクエリが実行された場合、または外部アプリケーションがカスタムSQLクエリを介して変更を行った場合は機能しません。
wpdb
クラスを拡張することによって:また、 db.php
)ファイルをwp-content
ディレクトリに作成し(またはプラグインからwp-content
にソフトリンクを作成し)、そこからwpdb
クラスを拡張することもできます。このようにして、wpdb
クラスの任意のメソッドを拡張し、そこから挿入/更新/削除クエリを追跡することができます。
ただし、SQLクエリによるデータベースの変更を追跡するには、プラグインのアクティブ化時に triggers を作成してからトリガーを介してデータベースの変更を追跡するのが唯一の信頼性の高い完全な方法です。ただし、プラグインからこれを行うには、WordPressに使用しているデータベース資格情報にcreate/dropトリガ権限が必要です。
_(注意:トリガが多すぎるとDBクエリが遅くなる可能性があります。また、プラグインの無効化時にトリガをクリーンアップするようにしてください。
コメントがコメント投稿者によって保存された(投稿された)ときに何かしたい場合は、preprocess_commentフィルタを使用します( プラグインAPI /フィルタリファレンス/ preprocess comment を参照)。
function preprocess_comment_handler( $commentdata ) {
//some code
return $commentdata;
}
add_filter( 'preprocess_comment' , 'preprocess_comment_handler' );
コメントが保存されたときに何をしたいのかについてのコードを追加するだけです。このコードブロックをfunctions.php
に配置します(子テーマにします。テーマの更新によってコードが上書きされることはありません)。