首先,您必须拒绝访问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或插件文件,您就完成了。