我所知道的最好的方法是过滤数据。
对于帖子,您可以执行以下操作:
function my_check_post_not_crazy( $data, $post_arr ) {
$max_content_length = 2048; # max length in characters
$max_num_posts = 200; # maximum number of posts
if ( !current_user_can(\'activate_plugins\') && empty( $post_arr[\'ID\'] ) ) {
$die_args = array(\'back_link\' => true);
# Not an admin user and trying to add another post of some type
if ( strlen($data[\'post_content\']) > $max_content_length ) {
# Too long
wp_die("{$max_content_length} characters maximum", \'Cannot Post\', $die_args);
}
$args = array(
\'author\' => $data[\'post_author\'],
\'posts_per_page\' => 1
);
$posts = new WP_Query( $args );
if ( $posts->found_posts >= $max_per_user ) {
wp_die("{$max_num_posts} per user. Limit Reached.", \'Cannot Post\', $die_args );
}
}
}
add_filter(\'wp_insert_post_data\', \'my_check_post_not_crazy\', 10, 2 );
使用wp\\u insert\\u attachment\\u数据过滤器,同样的想法也适用于附件。
我刚刚意识到,再看看这个,有两件事:
与其阻止他们发布新帖子,不如从一开始就阻止他们尝试,这样会更方便用户。也许有一个钩子可以检查他们是否可以发帖,获取他们当前的帖子数量,然后在他们单击“New post”时给出一条消息当他们超过帖子长度时,与其将back\\u link设置为true,不如将其设置为false并告诉他们点击后退按钮,这样会更加方便用户。我认为这将确保他们在编辑器中仍保留新文本,以便他们可以调整它。另一种选择是使用javascript跟踪帖子的长度,如果他们试图在内容太多时保存/发布,则会发出警告/中止错误