it-swarm.com.de

Wie kann man die Anzahl der Benutzer einschränken, die Beiträge pro Tag und Rolle veröffentlichen sollen?

Ich würde gerne wissen, ob es eine Möglichkeit/ein Plugin gibt, den vom Benutzer veröffentlichten Beitrag (in einer bestimmten Zeitspanne) auf seine Rolle zu beschränken.

So was:

  • Rolle A -> 1 Beitrag pro Tag und 30 Beitrag insgesamt.
  • Rolle B -> 10 Beiträge pro Tag und 100 Beiträge insgesamt.
  • Rolle C -> unbegrenzt.

Ich weiß, dass es einige Plugins gibt, die diese Funktionen haben, aber sie können entweder nur die Anzahl der Posts pro Tag oder nur die Anzahl der Posts in der Rolle Basic steuern und sie schließen sich nicht gegenseitig ein.

Hinweis: Dies soll verhindern, dass die Immobilien Plattform beschimpft wird. (Anmerkung des Herausgebers)

Irgendwelche Ideen?

4
dev-jim

Sie können mein Plugin Erstellungsbeschränkungen für Posts verwenden, das pro Benutzer, pro Rolle, pro Posttyp, pro Poststatusbeschränkungssystem und in Kombination mit seinem Aktions-Hook post_creation_limits_custom_checks festgelegt ist und überprüft, ob der Benutzer an diesem Tag bereits einen Post erstellt hat - In diesem Fall: Zeigen Sie die Meldung "Limit erreicht" an. Zum Beispiel:

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

Sie müssen sich nicht darauf verlassen

//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';
    }

Wo ich $errors habe, können Sie eine Nachricht ausgeben, in meinem Fall stecke ich sie in das WP Benutzer-Frontend.

Wenn Sie dies nach Rolle tun wollten, können Sie einfach eine weitere if-Anweisung hinzufügen, um zu überprüfen, ob dieser Benutzer die richtige Rolle in der Funktion if ( 1 < $count ) {} hat. Anschließend wird der Code wiedergegeben oder eine Umleitung zu einer Fehlerseite ausgeführt.

0
Zackskeeter