name = $name; $this->value = $value; $this->originalValue = $value; $this->config = $config; if (array_key_exists('wp', $config) && $config['wp'] === true) { $this->isDefault = true; } } /** * Set field value and track dirty state */ public function set(mixed $value): self { error_log('Checking if value is the same as old value: '.print_r($value, true)); if ($value !== $this->value) { error_log('Saving new value: '.print_r($value, true)); $this->value = $value; $this->isDirty = true; } return $this; } /** * Get current value */ public function get(): mixed { return $this->value; } /** * Mark field as clean (after save) */ public function markClean(): self { $this->originalValue = $this->value; $this->isDirty = false; return $this; } /** * Reset to original value */ public function reset(): self { $this->value = $this->originalValue; $this->isDirty = false; return $this; } /** * Add validation error */ public function addError(string $message): self { $this->errors[] = $message; $this->isValid = false; return $this; } /** * Clear all errors */ public function clearErrors(): self { $this->errors = []; $this->isValid = true; return $this; } /** * Get field type from config */ public function type(): string { return $this->config['type'] ?? 'text'; } /** * Check if this is a WordPress default field */ public function isWpDefault(): bool { return $this->isDefault ?? false; } /** * Check if this is a taxonomy relationship field (not taxonomy_type) */ public function isTaxonomy(): bool { return ($this->type() === 'taxonomy' || ($this->type() === 'selector' && isset($this->config['subtype']) && $this->config['subtype'] === 'taxonomy')) && !isset($this->config['isReference']); } /** * Check if field is required */ public function isRequired(): bool { return !empty($this->config['required']); } /** * Get field label */ public function label(): string { return $this->config['label'] ?? $this->name; } /** * Get field description */ public function description(): string { return $this->config['description'] ?? ''; } }