web-dev-qa-db-ja.com

1日および役割ごとに投稿を公開するユーザーを制限する方法

自分の役割でユーザーの投稿を(一定期間内に)制限する方法/プラグインはありますか?

このような:

  • ロールA - > 1日1回の投稿と合計30件の投稿。
  • 役割B - 1日あたり10件以上、合計100件の投稿。
  • ロールC - >無制限.

これらの機能を持つプラグインがいくつかあることを私は知っていますが、それらは1日あたりの制限投稿数または役割基本上の投稿数制限のいずれかを制御することができるだけです。

注:これは real Estate プラットフォームが無効化されるのを防ぐためです。 (編集者注)

何か案は?

4
dev-jim

私のプラグインを使うことができます 投稿作成制限 役割ごと、投稿タイプごと、投稿ごとのステータス制限システムを持ち、そのpost_creation_limits_custom_checksアクションフックと組み合わせて、その日その投稿がすでに作成されているか確認する - もしそうなら:「限界に達したメッセージ」を表示しなさい。例えば:

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

あなたは頼る必要はありません

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

$errorsがあるところはあなたがメッセージをエコーすることができるところです、私の場合私はWPユーザフロントエンドに差し込みます。

そのユーザーがif ( 1 < $count ) {}内で正しいロールを持っているかどうかをチェックする別のifステートメントを追加するよりも、ロールでそれをしたい場合は、コードをエコーし​​たりエラーページにリダイレクトしたりします。

0
Zackskeeter