2016-05-01 3 views
0

Я две роли,WordPress - Скрыть посты других ролей в бэкэнде

  1. Пользователей
  2. рекрутера.

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

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

ответ

0

Вы можете добиться этого с помощью 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; 
    } 
} 

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

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

Некоторые вопросы, связанные с этим: Hide "free" orders in WooCommerce orders section from admin panel