I think that hook pre_comment_approved
should be perfect in this case.
Something like this should do the job:
function my_pre_comment_approved($approved, $commentdata) {
// you can return 0, 1 or 'spam'
if ( $commentdata['user_ID'] ) {
$args = array(
'user_id' => $commentdata['user_ID'],
'post_id' => $commentdata['comment_post_ID']
);
$usercomment = get_comments( $args );
if ( 1 <= count( $usercomment ) )
return 0;
}
return $approved;
}
add_filter('pre_comment_approved', 'my_pre_comment_approved', 99, 2);
Your filter should return:
0
(i.e. ‘false’) if the comment should be disapproved1
(i.e. ‘true’) if the comment should be approved'spam'
if the comment should be marked as spam