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

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

Как это:

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

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

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

Есть идеи?

Вы можете использовать мои ограничения для создания плагинов, которые имеют каждого пользователя, на роль, для каждого типа сообщений, для каждой системы ограничения состояния сообщения и в сочетании с его действием 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 ) {} , затем он повторяет ваш код или запускает перенаправление на страницу с ошибкой ,