web-dev-qa-db-ja.com

フック/フィルターによるコメントフォーム送信/リストの傍受

カスタムテーブルを使ってその内容を保存するメディアプラグインを書いています。 (例えば、ワードプレスが添付データを保存している投稿テーブルではありません)。今私はそれにコメントを追加するためにデフォルトのワードプレスのコメントシステムを使用する方法を探しています。 (これらのコメントは通常のコメントテーブルには含まれませんが、カスタムテーブルにも含まれます。

私は二つのことが必要です。

  1. 基準が満たされている場合、私が送信したコメントを傍受して自分のコードで処理することを可能にするフック。基準自体は任意で重要ではありません。Wordpressが処理する前に投稿データにアクセスする方法が必要です。
  2. Wp_list_comments()データを自分のtabledataに置き換えることを可能にするフィルタ。

私は知っていますが、これは厄介な考えですが、投稿/添付ファイルの表は私が必要とするものを制限しすぎています。何か案は?

1
Patriek

wp_list_comments()にはフィルタもフックもないので、少し難しいかもしれませんが、comments_array filter hookを使うことができます

add_filter('comments_array','my_custom_comments_list');
function my_custom_comments_list($comments, $post_id){
    //if criteria are met
    //pull your comments from your own table
    //in to an array and return it.
    return $my_comments;
    //else return $comments
}

preprocess_commentフィルタフックを使用するのが「コメント送信と処理を傍受する」チップの回答が最善の方法ですが、WordPressフォームがデフォルトテーブルにもコメントを挿入することを避けることができるので、削除するにはwp_insert_commentアクションフックを使用できます。挿入直後のデフォルトテーブルからのコメント

add_action('wp_insert_comment','remove_comment_from_default_table');
function remove_comment_from_default_table( $id, $comment){
    //if criteria are met
    //and the comment was inserted in your own table
    //remove it from the default table:
    wp_delete_comment($id, $force_delete = true);
}
2
Bainternet

preprocess_commentフィルタフックを使ってみてください。

function my_handling_function( $comment_data ) {
     // Here, do whatever you need to do with the comment
     // modify it, pull data out of it to save somewhere
     // or whatever you need to do
     // just be sure to return $comment_data when you're done!
     return $comment_data;
}
add_filter( 'preprocess_comment', 'my_handling_function' );
4
Chip Bennett