enqueueAssets(); $min = $this->getAdvancedOption('min') ?? null; $max = $this->getAdvancedOption('max') ?? null; $displayFormat = $this->getAdvancedOption('date_format') ?? get_option('date_format') ?? 'Y-m-d'; $momentFormat = DateNormalizer::toMomentFormat($displayFormat); $defaultValue = $this->defaultDisplayDate($displayFormat); $cssClass = 'acpt-datepicker acpt-admin-meta-field-input'; if ($this->hasErrors()) { $cssClass .= ' has-errors'; } if ($this->isChild()) { if ($this->isLeadingField()) { $cssClass .= ' acpt-leading-field'; } $field = ''; $field .= ''; $date = 'required() . ' id="' . Strings::esc_attr($this->getIdName()) . '[value]" name="' . Strings::esc_attr($this->getIdName()) . '[value]" value="' . $defaultValue . '" type="text" class="' . $cssClass . '"'; } else { $field = ''; $date = 'required() . ' id="' . Strings::esc_attr($this->getIdName()) . '" name="' . Strings::esc_attr($this->getIdName()) . '" type="text" class="' . $cssClass . '" value="' . $defaultValue . '"'; } if ($min) { $date .= ' data-min-date="' . DateNormalizer::formatDate($min, $displayFormat) . '"'; } if ($max) { $date .= ' data-max-date="' . DateNormalizer::formatDate($max, $displayFormat) . '"'; } $date .= ' data-format="' . $momentFormat . '"'; $date .= ' data-canonical-format="Y-m-d"'; $date .= $this->appendDataValidateAndLogicAttributes(); $date .= '>'; $field .= (new AfterAndBeforeFieldGenerator())->generate($this->metaField, $date); $field .= '' . Translator::translate("Clear") . ''; return $this->renderField($field); } /** * Returns the stored canonical date (Y-m-d) re-formatted for display. * Falls back to the raw default value when the stored value is not canonical. */ private function defaultDisplayDate(string $displayFormat): ?string { try { $raw = $this->getDefaultValue(); if (empty($raw)) { return null; } // Canonical stored value — format for display $formatted = DateNormalizer::formatDate($raw, $displayFormat); if ($formatted !== null) { return Strings::esc_attr($formatted); } // Fallback: try to parse whatever is stored and normalise $canonical = DateNormalizer::toDate($raw); if ($canonical !== null) { return Strings::esc_attr(DateNormalizer::formatDate($canonical, $displayFormat)); } return null; } catch (\Exception $e) { do_action('acpt/error', $e); return null; } } private function enqueueAssets(): void { wp_enqueue_script('momentjs', plugins_url('acpt-lite/assets/vendor/moment/moment.min.js'), [], '2.18.1', true); wp_enqueue_script('daterangepicker-js', plugins_url('acpt-lite/assets/vendor/daterangepicker/js/daterangepicker.min.js'), [], '3.1.0', true); wp_enqueue_style('daterangepicker-css', plugins_url('acpt-lite/assets/vendor/daterangepicker/css/daterangepicker.min.css'), [], '3.1.0', 'all'); } }