1

I need a function to limit the same user to leave max 1 comment every minute on my wordpress website (all posts).

2
  • 2
    how do you define what is a "user" Commented Sep 3, 2016 at 13:33
  • What are you hoping to achieve by doing this? Are you trying to avoid spam?
    – Tom J Nowell
    Commented Sep 3, 2016 at 13:51

1 Answer 1

0

Place the following into a custom plugin or into your child theme's functions file:

add_action("wp_insert_comment", function() { 
    global $current_user;
    if ( !$current_user->ID ) return;
    update_user_meta( $current_user->ID, "se_last_commented", time() );
});

add_action("init", function() { 
    if ( "wp-comments-post.php" == $GLOBALS['pagenow'] ) {
        global $current_user;
        if ( !$current_user->ID ) return;
        $last_commented = (int) get_user_meta( $current_user->ID, "se_last_commented", 1 );
        if ( !$last_commented ) return; // no time recorded
        if ( (time() - $last_commented) > DAY_IN_SECONDS ) {
            $date = date( "H -1-, i -2-, s -3-", DAY_IN_SECONDS - (time() - $last_commented) );
            $date = str_replace( array('-1-','-2-','-3-'), array('hr','min','sec'), $date );
            wp_die(sprintf( '<strong>ERROR:</strong> You have <u>%s</u> left until you can be able to post a comment.', $date ));
        }
    }
}, 0);

Basically what it does is it records the time integer of last time a user has posted a comment, and a user here means a logged-in WP user, and when any user submits a comment, WP will automatically check for last time this user has posted a comment and if it was longer than a day (DAY_IN_SECONDS) then the process will be allowed, otherwise the user will see a death screen where they're notified how long they'll have to wait until they can be able to post a comment.

Hope that helps.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.