public function posts_where($where, $query) { $post_type = ''; if (isset($query->query_vars['post_type'])) { $post_type = $query->query_vars['post_type']; } if (empty($post_type)) { if ($query->is_page) { $post_type = 'page'; } else { $post_type = 'post'; } } if ($post_type !== 'any' && $post_type !== $this->type) { return $where; } $user = wp_get_current_user(); $user_roles = array(); if (!is_user_logged_in() || $user->ID === 0) { $user_roles[] = self::$GUEST_ROLE_KEY; } elseif (empty($user->roles)) { return $where; } else { $user_roles = $user->roles; } if (in_array(self::ADMINISTRATOR_ROLE_KEY, $user_roles)) { return $where; } $entity = new WPFront_User_Role_Editor_Entity_Post_Type_Permissions(); $table_name = $entity->table_name(); global $wpdb; $roles = array(); foreach ($user_roles as $role) { $roles[] = $wpdb->prepare('%s', $role); } $count = count($roles); $roles = implode(',', $roles); return $where . " AND {$wpdb->posts}.id NOT IN (" . "SELECT post_id FROM {$table_name} " . "WHERE role IN ({$roles}) " . "AND enable_permissions = 1 " . "AND has_read = 0 " . "GROUP BY post_id " . "HAVING COUNT(*) = {$count}" . ") "; }