$definition) { if (in_array($key, ['_pcwp_schedule', '_pcwp_series_id', '_pcwp_series_sequence', '_pcwp_series_overrides'], true)) { continue; } if (($definition['type'] ?? '') === 'array') { $definition['show_in_rest'] = ['schema' => ['type' => 'array', 'items' => ['type' => 'string']]]; } register_post_meta('pcwp_series', $key, array_merge([ 'single' => true, 'show_in_rest' => true, 'auth_callback' => static fn (): bool => current_user_can('edit_pcwp_events'), ], $definition)); } register_post_meta('pcwp_series', self::RULE, [ 'type' => 'string', 'single' => true, 'show_in_rest' => true, 'sanitize_callback' => [self::class, 'sanitizeRule'], 'auth_callback' => static fn (): bool => current_user_can('edit_pcwp_events'), ]); foreach ([self::EXCLUSIONS, self::ADDITIONS] as $key) { register_post_meta('pcwp_series', $key, [ 'type' => 'array', 'single' => true, 'show_in_rest' => ['schema' => ['type' => 'array', 'items' => ['type' => 'string']]], 'sanitize_callback' => [self::class, 'sanitizeDates'], 'auth_callback' => static fn (): bool => current_user_can('edit_pcwp_events'), ]); } foreach (['_pcwp_venue_ids', '_pcwp_organizer_ids'] as $key) { register_post_meta('pcwp_series', $key, [ 'type' => 'array', 'single' => true, 'show_in_rest' => ['schema' => ['type' => 'array', 'items' => ['type' => 'integer']]], 'sanitize_callback' => [self::class, 'sanitizeIds'], 'auth_callback' => static fn (): bool => current_user_can('edit_pcwp_events'), ]); } register_post_meta('pcwp_series', self::WINDOW_END, [ 'type' => 'string', 'single' => true, 'show_in_rest' => false, 'sanitize_callback' => 'sanitize_text_field', 'auth_callback' => static fn (): bool => current_user_can('edit_pcwp_events'), ]); } public static function sanitizeRule(mixed $value): string { return strtoupper((string) preg_replace('/[^A-Z0-9=;,\-+T:Z]/i', '', (string) $value)); } /** @return list */ public static function sanitizeDates(mixed $value): array { if (! is_array($value)) { return []; } return array_values(array_unique(array_filter(array_map( static fn (mixed $date): string => sanitize_text_field((string) $date), $value, )))); } /** @return list */ public static function sanitizeIds(mixed $value): array { return is_array($value) ? array_values(array_unique(array_filter(array_map('absint', $value)))) : []; } }