$caps Primitive capabilities required. * @param string $cap Capability checked. * @param int $user_id User checked. * @return array */ public function map( $caps, $cap, $user_id ): array { if ( self::META !== $cap ) { return (array) $caps; } foreach ( $this->capabilities() as $capability ) { if ( user_can( (int) $user_id, $capability ) ) { return array( $capability ); } } return array( 'do_not_allow' ); } /** * The approval capabilities this user holds, which decide the holds the * queue shows them; null for an administrator, who sees every hold. * * @param int $user_id User. * @return list|null */ public function held_by( int $user_id ): ?array { if ( user_can( $user_id, 'manage_options' ) ) { return null; } return array_values( array_filter( $this->capabilities(), static fn ( string $capability ): bool => user_can( $user_id, $capability ) ) ); } /** * Every approval capability: manage_options first, then the claims'. * * @return list */ private function capabilities(): array { $claimed = null === $this->extensions ? array() : $this->extensions->approval_capabilities(); return array_values( array_unique( array_merge( array( 'manage_options' ), $claimed ) ) ); } }