WordPress-скрыть посты других ролей в backend

У меня две роли,

  1. Участники
  2. Вербовщик.

Оба будут публиковаться в пользовательской записи типа»Companies«.
Когда они собираются редактировать / удалять свои собственные сообщения, я не хочу, чтобы они видели другие сообщения, опубликованные другими ролями. В настоящее время в бэкэнде отображается заголовок других записей роли. Роли не могут редактировать / удалять другие роли в бэкэнде, но я вижу название других ролей по ссылке просмотра.

Как от него избавиться?

1 ответ

  1. Этого можно достичь с помощью parse_queryфильтра с
    $pagenowглобальная переменная.

    1. Получить роль пользователя, вошедшего в систему.
    2. Затем получите все ID пользователя с этой ролью
    3. Передайте эти ID через author__inключ.

    Вот код

    add_filter('parse_query', 'wh_hideOthersRolePost');
    
    function wh_hideOthersRolePost($query) {
        global $pagenow;
        global $current_user;
    
        $my_custom_post_type = 'companies'; // <-- replace it with your post_type slug
        $my_custom_role = ['members', 'recruiter']; // <-- replace it with your role slug
    
        //if user is not logged in or the logged in user is admin then dont do anything
        if (!is_user_logged_in() && !is_admin())
            return;
    
        $user_roles = $current_user->roles;
        $user_role = array_shift($user_roles);
    
        if(!in_array($user_role, $my_custom_role))
            return;
    
        $user_args = [
            'role' => $user_role,
            'fields ' => 'ID'
        ];
    
        //getting all the user_id with the specific role.
        $users = get_users($user_args);
        //print_r($users);
    
        if (!count($users)) {
            return;
        }
        $author__in = []; // <- variable to store all User ID with specific role
        foreach ($users as $user) {
            $author__in[] = $user->ID;
        }
    
        if (is_admin() && $pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == $my_custom_post_type){
            //retriving post from specific authors which has the above mentioned role.
            $query->query_vars['author__in'] = $author__in;
        }
    }
    

    Код переходит в функцию.php-файл активной дочерней темы (или темы). Или также в любом плагине php файлов.
    Код тестируется и работает.

    Надеюсь, это поможет!

    Некоторые какие связанные вопрос: скрыть «бесплатные» заказы в разделе WooCommerce заказы из админ панели