防止根据每个用户每个时间单位的页面/帖子创建页面/帖子

时间:2013-06-02 作者:Jordan

我正在做一个新项目,我想让用户有权在网站上创建页面。为了防止用户“滥发”大量页面,我想为每个用户设置每日上传限制。我已经发布了下面使用的代码,但我无法取消页面上载,因为该事件是在创建页面并将其添加到数据库后触发的。最坏的情况是,我可以搜索数据库并删除他们刚刚创建的文档,但我认为这不是最好的解决方案。是否有一个类似于pre\\u post\\u update的钩子,我可以用来检查和/或取消上传的页面?如果没有我可以使用的钩子,有没有更好的方法来解决这个问题?

add_action( \'save_post\', \'check_post_limit\' );

function check_post_limit( $post_id ) {
global $userdata;
global $post_type;
global $wpdb;
if( $userdata->ID != 1) {
    $post_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE DATE(post_modified) = DATE(NOW()) AND post_author = $userdata->ID" );
}
if( $post_count > 3 ) {
    wp_die(); //will not work because page is already in the database
}
}

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您需要更快地中断提交后的过程。您的代码连接到admin_init 经过一两次修改后,很有可能工作wp_die 这很严厉。如果是我,我只会重定向回原始页面而不保存。

有点像(未经测试)。。。

function check_post_limit() {
  if (!isset($_POST[\'ID\'])) return;

  global $wpdb;

  if( $userdata->ID != 1) {
    $post_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE   DATE(post_modified) = DATE(NOW()) AND post_author = $userdata->ID" );
  }

  if( isset($post_count) && $post_count > 3 ) {
    wp_safe_redirect(admin_url(\'post.php?post=\'.$_POST[\'post_ID\'].\'&action=edit\'));
    exit;
  }
}
几点注意事项:

编写的代码可能会向ID==1的用户发出通知,因为$post_count 不会设置

SO网友:Nicolai Grossherr

也许你可以通过用户角色来实现,比如:

function check_post_limit() {
  global $wpdb;

$author = wp_get_current_user();    

$post_count = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE   DATE(post_modified) = DATE(NOW()) AND post_author = $userdata->ID" );

  if( isset($post_count) && $post_count > 3  && current_user_can(\'contributor\') ) {
   $author->remove_role( \'contributor\' );
   $author->add_role( \'subscriber\' );
  }

  if( isset($post_count) && $post_count < 3  && current_user_can(\'subscriber\') ) {
   $author->remove_role( \'subscriber\' );
   $author->add_role( \'contributor\' );
  }

}

add_action(\'publish_post\', \'check_post_limit\');
add_action(\'wp_login\', \'check_post_limit\');
注意:这是绝对未经测试的。

这个想法基本上来自这里:https://stackoverflow.com/questions/9181440/wordpress-change-user-role-conditionally

结束

相关推荐