web-dev-qa-db-fra.com

Limiter le nombre de messages qu'un utilisateur peut publier par minute?

J'ai donc trouvé la solution permettant de limiter le nombre de publications qu'un utilisateur peut publier par jour, mais pas par minute.

Voici un extrait du code que j'ai trouvé sur http://wordpress.org/support/topic/limit-the-number-of-posts-a-user-can-make?replies= 18

    //limit the quantity to N posts
    $N = 20; max 20 posts por usuario
    $count_posts = count(get_posts(array('author'=>$user_ID)));// returns the quantity of written posts by current user to $user_ID
    if ($count_posts >= N){
    Header("Location: index.php");//redirects to dashboard, where it should point the user that he cannot create a new post
    }
    //end of modification

Comment puis-je modifier la variable $ count_posts afin qu'elle compte le temps? Je souhaite faire en sorte que les utilisateurs ne puissent soumettre qu'un seul message toutes les 2 minutes. S'ils soumettent une publication sur le serveur, ils doivent attendre 2 minutes de plus avant de soumettre une autre publication.

2
user1114968

Je commencerais par établir l'approche la plus conviviale à cet égard. Je pense que ce serait un avertissement après avoir cliqué sur le bouton “Publier/Mettre à jour”. Il est possible d'empêcher le chargement de l'écran Modifier le message si l'utilisateur le visite à nouveau dans les 2 minutes suivant la publication du message précédent. Je ne pense pas que ce soit pratique cependant et je ne vois pas pourquoi la redirection doit avoir lieu. Pourquoi ne pas simplement laisser la publication se terminer mais permettre aux utilisateurs de créer des brouillons?

Effectuez la vérification lors de la publication et, à moins que l'attaque ne soit mentionnée, très peu d'utilisateurs verront jamais un quelconque avertissement ...

add_action( "publish_post", 'limit_post_frequency' );

function limit_post_frequency(){
    /* here you could store the time() in user meta, if no existing value found.
       If the time() meta value already exists, check if it is 120 seconds in the past.
       If 120 seconds in the past, update the user meta value with time()
       Else
       Do a WP notice letting user know they need to wait, you could calculate how
       long they have to wait.
    */
}

Si j'utilise mon approche J'envisagerais de stocker un tableau dans la méta-valeur utilisateur et d'inclure un nombre de tentatives. Si l'utilisateur tente de soumettre trop de fois, vous pouvez le traiter comme un problème de sécurité et le résoudre automatiquement.

UPDATE: Je voudrais ajouter une note concernant la sécurité. Si les limitations concernent les spammeurs, elles pourraient créer beaucoup de brouillons en utilisant mon approche. Une solution pour supprimer automatiquement les brouillons existe probablement. Il serait assez facile d'envoyer des rappels par courrier électronique aux auteurs pour les avertir qu'un projet va bientôt expirer et peut-être même leur envoyer une copie de leur message par courrier électronique tout en le supprimant.

Gardez également à l'esprit que les messages peuvent être programmés. Ainsi, vos auteurs pourraient créer des brouillons après avoir atteint leur limite quotidienne de 20, mais créer des brouillons planifiés et publiés automatiquement. Je pense que j'aimerais créer un plugin qui gère cela, alors je l’ai ajouté à ma liste de choses à faire.

2
Ryan Bayne