WordPress-做到这一点,以使非管理员用户无法看到具有特定自定义帖子状态的帖子

时间:2018-07-10 20:19:59

标签: wordpress

我将使用哪些钩子来生成函数文件,以使所有非管理员用户都无法在wp-admin后端看到具有特定自定义post_status的所有帖子。但是仍然可以通过WordPress发布循环查询和循环吗?

1 个答案:

答案 0 :(得分:1)

使用 pre_get_posts ,您应该可以入门(在管理屏幕中隐藏帖子)。您可能还需要检查帖子类型等。

function filter_posts( $wp_query ) {

    if ( is_admin() ) {

        $user        = wp_get_current_user();
        $post_status = 'draft';

        if ( ! in_array( 'administrator', $user->roles ) ) {
            $wp_query->set( 'post_status', $post_status );
        }
    }

}

add_action( 'pre_get_posts', 'filter_posts', 10 );

要禁止用户编辑具有特定状态的帖子,您应该执行以下操作:

function restrict_post_editing(){
    global $post;
    $post_status = 'draft';

    if ( get_post_status( $post ) == $post_status ) {

        $user = wp_get_current_user();

        if ( ! in_array( 'administrator', $user->roles ) ) {
            do_action('admin_page_access_denied');
            wp_die( __('You cannot modify or delete this entry.') );
            exit;
        }   

    }
}
add_action('edit_post', 'restrict_post_editing', 10, 1);
add_action('wp_trash_post', 'restrict_post_editing', 10, 1);
add_action('before_delete_post', 'restrict_post_editing', 10, 1);
相关问题