限制对垃圾的访问,仅限管理员访问

时间:2014-08-07 作者:zetka91

我是WordPress的新手。我必须限制除管理员以外的所有用户访问垃圾箱。所有用户都可以移动到垃圾箱,但只有管理员可以永久删除或还原。

我对php不太了解,是否有一些神奇的插件或其他简单的方法可以做到这一点?

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

首先,您必须拒绝访问admin中的垃圾页面。要显示垃圾,请\'post_status\' 主查询的参数必须为“trash”,所以如果当前用户不是管理员,则可以检查并重定向:

add_action( \'pre_get_posts\', \'deny_trash_access\' );

function deny_trash_access( $query ) {
  // nothing to do if not in admin or if user is an admin
  if (
    ! is_admin()
    || ! $query->is_main_query()
    || current_user_can( \'remove_users\' )
  ) return; 
  $status = $query->get( \'post_status\' );
  if (
    $status === \'trash\'
    || ( is_array( $status ) && in_array( \'trash\', $status, true ) )
  ) {
    wp_safe_redirect( admin_url() );
    exit();
  }
}
然而,这并不妨碍用户永久恢复或删除帖子。

可以使用\'wp_insert_post_data\' 筛选,如果在当前帖子数据中帖子状态为“垃圾”,并且用户试图更改它,则可以通过强制中止编辑\'post_status\' 成为“垃圾”:

add_filter( \'wp_insert_post_data\', \'prevent_trash_status_change\', 999, 2 );

function prevent_trash_status_change( $data, $postarr ) {
  if ( ! isset( $postarr[\'ID\'] ) || empty( $postarr[\'ID\'] ) ) return $data;
  if ( current_user_can( \'remove_users\' ) ) return $data; // admin can edit trash
  // get the post how it is before the update
  $old = get_post( $postarr[ID] );
  // if post is trashed, force to be trashed also after the update
  if ( $old->post_status === \'draft\' ) { 
    $data[\'post_status\'] = \'draft\';
  } 
  return $data;
}
将这两段代码片段放入函数中。php或插件文件,您就完成了。

结束