web-dev-qa-db-fra.com

Comment retarder la possibilité de publier des messages?

J'utilise buddypress et tous les nouveaux membres ont le rôle d'auteur. Le site ressemble plus à un forum avec un sujet. Je ne m'inquiète pas pour les commentaires, seulement les messages .

Récemment, j'ai reçu beaucoup de spam d'utilisateurs. Comment puis-je empêcher les utilisateurs de poster pendant au moins une semaine?

2
john powell

Il n'y aura pas de plugin pour ça, alors j'en ai écrit un. Vous pouvez l'utiliser comme plugin ou (mieux) comme plug-in mu (placez-le dans votre dossier ~/wp-content/mu-plugins).

Mu-Plugin: retarder la possibilité de "publier un message" en supprimant la MetaBox

Pour une explication détaillée de ce qui se passe et de la raison pour laquelle cela se produit, veuillez vous reporter aux commentaires en ligne:

<?php
/**
 * Plugin Name: Delay post publishing
 * Plugin URI: http://unserkaiser.com
 * Description: Only allows publishing a post if the user registered one week ago. 
 * Version: 0.1
 * Author: Franz Josef Kaiser
 * Author URI: http://unserkaiser.com
 */

// Only run this for new "post"-post_type admin UI screens
if ( ! is_admin() AND 'post-new.php' !== $GLOBALS['typenow'] ) return;

function remove_publish_metabox_until_date() 
{
    // Retrieve the current users' data as object
    $curr_user = get_user_by( 'id', get_current_user_id() );

    // Get the time/date (and format) of the time 
    // the user registered as UNIX timestamp - needed for comparison
    $reg_date  = abs( strtotime( $curr_user->user_registered ) );
    $curr_date = abs( strtotime( current_time( 'mysql' ) ) );

    // Human readable difference: This calculates the time since the user registered
    $diff       = human_time_diff( $reg_date, $curr_date );
    $diff_array = explode( ' ', $diff );

    // Remove if we're on the 1st day (diff result is mins/hours)
    // This removes the MetaBox
    if ( 
        strstr( $diff_array[1], 'mins' )
        OR strstr( $diff_array[1], 'hours' )
    )
        return remove_meta_box( 'submitdiv', null, 'side' );

    // Remove if we're below or equal to 7 days (1 week)
    // This removes the MetaBox
    if ( 7 >= $diff_array[0] )
        return remove_meta_box( 'submitdiv', null, 'side' );
}
add_action( 'add_meta_boxes', 'remove_publish_metabox_until_date', 20 );

Des mises à jour supplémentaires pour ce plugin sont disponibles dans this Gist .

Peut également être trouvé dans le référentiel du plugin WPSE .

3
kaiser