'object', 'properties' => [ 'id' => ['type' => 'integer', 'minimum' => 1], 'size' => ['type' => 'string', 'description' => 'full (Standard) oder Name einer Bildgröße.'], ], 'required' => ['id'], 'additionalProperties' => false, ]; } public function outputSchema(): ?array { return null; } public function annotations(): array { return Annotations::read(); } public function isDirect(): bool { return true; } public function permission(array $input): bool|WP_Error { $attachment = MediaGuard::attachment($input['id'] ?? null); return $attachment instanceof WP_Error ? $attachment : true; } public function execute(array $input): mixed { $attachment = MediaGuard::attachment($input['id'] ?? null); if ($attachment instanceof WP_Error) { return $attachment; } $id = (int) $attachment->ID; $size = (string) ($input['size'] ?? 'full'); if ($size === 'full') { $path = get_attached_file($id); $url = (string) wp_get_attachment_url($id); } else { $data = image_get_intermediate_size($id, $size); if (! is_array($data) || ! isset($data['path'])) { return Errors::notFound( sprintf('Die Größe "%s" gibt es für dieses Medium nicht.', $size), 'Verfügbare Größen stehen unter sizes in lit/media-get.' ); } $uploads = wp_upload_dir(); $path = (is_array($uploads) ? (string) ($uploads['basedir'] ?? '') : '') . '/' . $data['path']; $url = (string) ($data['url'] ?? ''); } if (! is_string($path) || ! is_readable($path) || ! MediaFiles::isWithinUploads($path)) { return Errors::notFound('Die Datei fehlt auf dem Server.', 'Medium in der Mediathek prüfen.'); } $bytesOnDisk = (int) filesize($path); if ($bytesOnDisk > $this->limits->inlineBytes()) { return Errors::unsupported( sprintf( 'Die Datei ist zu groß für die Übertragung (%.1f MB, Limit %d MB).', $bytesOnDisk / 1048576, $this->limits->inlineMegabytes() ), 'Die Datei-URL (url aus lit/media-get) verwenden oder eine kleinere Bildgröße (size) wählen.' ); } // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents $bytes = file_get_contents($path); if ($bytes === false) { return Errors::internal(); } $type = wp_check_filetype(wp_basename($path)); $mime = is_string($type['type'] ?? null) && $type['type'] !== '' ? $type['type'] : (string) $attachment->post_mime_type; return [ 'type' => 'resource', 'resource' => ['uri' => $url, 'mimeType' => $mime, 'blob' => base64_encode($bytes)], ]; } }