web-dev-qa-db-fra.com

Comment limiter l'utilisateur à publier des publications par jour et par rôle?

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?

4
dev-jim

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
}
2
Bainternet

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.

0
Zackskeeter