'object', 'properties' => array_merge( [ 'url' => ['type' => 'string', 'minLength' => 1, 'description' => 'http(s)-URL der Datei.'], 'filename' => [ 'type' => 'string', 'description' => 'Optional: Dateiname mit Endung (Standard: aus der URL).', ], ], MediaUploads::metaProperties() ), 'required' => ['url'], 'additionalProperties' => false, ]; } public function outputSchema(): ?array { return MediaUploads::outputSchema(); } public function annotations(): array { return ['readonly' => false, 'destructive' => false, 'idempotent' => false]; } public function isDirect(): bool { return true; } public function permission(array $input): bool|WP_Error { return $this->uploads->permission($input); } public function execute(array $input): mixed { $filename = isset($input['filename']) && $input['filename'] !== '' ? (string) $input['filename'] : null; $url = (string) $input['url']; return $this->uploads->run( $this->name(), fn (): int|WP_Error => $this->importer->fromUrl($url, $filename, MediaUploads::meta($input)), 'Datei "%s" von URL importiert (ID %d)' ); } }