Je voudrais savoir s'il existe un moyen/Plugin de limiter le poste publié par l'utilisateur (dans un laps de temps donné) par son rôle?
Comme ça:
- Rôle A -> 1 poste par jour et 30 postes au total.
- Rôle B -> 10 messages par jour et 100 messages au total.
- Rôle C -> illimité.
Je sais qu'il existe certains plug-ins dotés de ces fonctionnalités, mais ils ne peuvent contrôler que le nombre de publications par jour ou le nombre de publications sur le rôle de base; ils ne sont pas inclusifs les uns des autres.
Note: Ceci afin d'éviter que la plate-forme real estate soit spammée. (Note de l'éditeur)
Des idées?
Vous pouvez utiliser mon plugin Posts Creation Limits qui a un système de limitation du statut de chaque message par utilisateur, par rôle, par message et combiné avec son hook post_creation_limits_custom_checks
pour vérifier si l'utilisateur a déjà créé un message ce jour-là - si c'est le cas: affiche le "message limite". Par exemple:
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
}
Vous n'avez pas besoin de compter
//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';
}
Là où j'ai $errors
, vous pouvez faire écho à un message. Dans mon cas, je branche le client WP.
Si vous voulez le faire par rôle, vous pouvez simplement ajouter une autre instruction if pour vérifier si cet utilisateur a le rôle correct dans la fonction if ( 1 < $count ) {}
. Cela renvoie alors votre code ou lance une redirection vers une page d'erreur.