如何限制WordPress用户每周仅上传10个视频
实现WordPress用户每周视频上传数量限制
要把现有的总上传限制改成每周限制,你需要替换统计用户视频数量的逻辑,不再统计总数,而是统计用户过去7天内发布的视频数量。以下是修改后的完整代码:
<?php function streamtube_child_check_limit_uploads( $errors ){ $max_allowed = 10; // 每周允许上传的视频数量 $user_id = get_current_user_id(); // 跳过管理员权限用户 if( current_user_can( 'administrator' ) ){ return $errors; } // 计算7天前的时间戳 $one_week_ago = strtotime( '-7 days' ); // 查询用户过去7天内发布的视频数量 $weekly_posts_query = new WP_Query( array( 'author' => $user_id, 'post_type' => 'video', 'post_status' => 'publish', // 只统计已发布的内容,可根据需求调整 'date_query' => array( array( 'after' => date( 'Y-m-d H:i:s', $one_week_ago ), 'inclusive' => true, ), ), 'posts_per_page' => -1, 'fields' => 'ids', // 只获取ID,提升查询效率 ) ); $current_user_weekly_posts = $weekly_posts_query->found_posts; // 检查是否达到每周上限 if( $current_user_weekly_posts >= $max_allowed ){ $errors->add( 'not_allowed', esc_html__( '你已达到每周允许上传的视频数量上限,请下周再尝试。', 'streamtube-child' ) ); } return $errors; } add_filter( 'streamtube/core/upload/video/errors', 'streamtube_child_check_limit_uploads', 100, 1 ); add_filter( 'streamtube/core/upload_chunks/video/errors', 'streamtube_child_check_limit_uploads', 100, 1 ); add_filter( 'streamtube/core/post/import_embed/errors', 'streamtube_child_check_limit_uploads', 100, 1 );
关键逻辑说明
- 时间范围计算:通过
strtotime( '-7 days' )获取7天前的时间戳,作为统计的起始点,确保只计算最近一周的上传量 - 高效查询:使用
WP_Query并指定fields => 'ids',只获取帖子ID而非完整内容,提升查询性能 - 权限判断:提前跳过管理员用户,避免不必要的查询
- 状态过滤:只统计
publish状态的视频,你可以根据需求调整为包含draft等其他状态
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

