Как ограничить пользователя публикацией сообщений в день и за роль?

Я хотел бы знать, есть ли способ / плагин, чтобы ограничить опубликованное пользователем сообщение (за определенный промежуток времени) его ролью?

Как это:

  • Роль A -> 1 сообщение в день и 30 сообщений.
  • Роль B -> 10 сообщений в день и 100 сообщений.
  • Роль C -> неограниченная.

Я знаю, что есть некоторые плагины, которые имеют эти функции, но они могут контролировать только лимит сообщения в день или ограничивать количество сообщений в роли basic, и они не взаимно включаются друг в друга.

Примечание. Это необходимо для того, чтобы не дать спамерской платформе. (Примечание редактора)

Есть идеи?

Solutions Collecting From Web of "Как ограничить пользователя публикацией сообщений в день и за роль?"

Вы можете использовать мои ограничения для создания плагинов, которые имеют каждого пользователя, на роль, для каждого типа сообщений, для каждой системы ограничения состояния сообщения и в сочетании с его действием post_creation_limits_custom_checks и проверять, создал ли пользователь сообщение в тот же день – если это так: show «достигнутое сообщение». Например:

 add_action( 'post_creation_limits_custom_checks', 'post_per_day_limit' ); function post_per_day_limit( $type, $user_id ) { global $bapl,$wpdb; // safe check: Plugin installed? ! isset( $bapl ) AND _doing_it_wrong( __FUNCTION__, sprintf( 'You need to %sinstall the needed Plugin%s', '<a href="http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/">', '</a>' ), 0 ); $time_in_days = 1; // 1 means in last day $count = $wpdb->get_var( $wpdb->prepare(" SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = %s AND post_author = %s AND post_date >= DATE_SUB(CURDATE(),INTERVAL %s DAY)", $type, $user_id, $time_in_days ) ); if ( 0 < $count ) $count = number_format( $count ); // here you can check since we have the $count ex: // limit for 2 posts a day if ( 1 < $count ) { // return limit reached message using the plugin class exit( $bapl->bapl_not_allowed( 'you can not posts more them two posts a day' ) ); } // else do nothing } 

Вам не нужно полагаться на

 //Limit posts per month $time_in_days = 1; // 1 means in last day $count = $wpdb->get_var( $wpdb->prepare(" SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = %s AND post_author = %s AND post_date >= DATE_SUB(CURDATE(),INTERVAL %s DAY)", 'post', get_current_user_id(), $time_in_days ) ); if ( 0 < $count ) $count = number_format( $count ); // here you can check since we have the $count ex: // limit for 2 posts a day if ( 1 < $count ) { // return limit reached message using the plugin class $errors[] = 'You have reached your monthly post limit'; } 

Там, где у меня есть $errors вы можете эхо-сообщения, в моем случае я подключаюсь к интерфейсу пользователя WP.

Если вы хотите сделать это по роли, вы можете просто добавить еще один оператор if, проверяющий, имеет ли этот пользователь правильную роль внутри if ( 1 < $count ) {} , затем он повторяет ваш код или запускает перенаправление на страницу с ошибкой ,