Tainacan Flexible Date
Custom Tainacan metadata type that accepts partial dates (YYYY, YYYY-MM), ISO ranges, Brazilian formats, and works natively with Tainacan filters
by Tainacan Team · github.com/marcossigismundo/tainacan-flexible-date · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/marcossigismundo/tainacan-flexible-date/archive/refs/heads/master.zipTipo de metadado para o Tainacan que aceita formatos flexíveis de data, mantendo compatibilidade com filtros nativos do Tainacan.
Por quê
O tipo "Date" nativo do Tainacan aceita estritamente YYYY-MM-DD. Acervos arquivísticos costumam ter datas parciais (2020, 2020-06), intervalos (2020-06-08/2020-06-09), formatos brasileiros (08/06/2020) e marcadores como s.d.. Este plugin acrescenta um tipo "Data flexível" que aceita tudo isso e ainda permite filtragem por intervalo na busca pública.
Formatos aceitos
| Formato | Exemplo | Precisão interna |
|---|---|---|
| ISO completo | 2020-06-08 |
dia |
| ISO mês | 2020-06 |
mês |
| ISO ano | 2020 |
ano |
| Intervalo | 2020-06-08/2020-06-09 |
range |
| Brasileiro | 08/06/2020, 08-06-2020 |
dia |
| Brasileiro mês/ano | 06/2020 |
mês |
| ISO com hora | 2020-06-08T14:30:00Z |
dia (hora descartada) |
| Sem data | s.d., s/d, [s.d.], n/d |
guardado como texto |
Qualquer outra string é guardada como texto cru e exibida como veio.
Como funciona internamente
Para cada valor gravado, o plugin armazena três postmeta:
- meta_key padrão do Tainacan (=
metadatum_id) → string crua original _tfd_<metadatum_id>_start→ data canônicaYYYY-MM-DDinicial_tfd_<metadatum_id>_end→ data canônicaYYYY-MM-DDfinal
O filtro "Intervalo de Data Flexível" e a reescrita em tainacan-api-prepare-items-args redirecionam queries SQL para as keys canônicas, então a busca por intervalo funciona mesmo quando o valor visível é parcial ou intervalo.
Instalação
- Copie a pasta para
wp-content/plugins/ - Ative em Plugins → Instalados (Tainacan precisa estar ativo)
- Em uma coleção Tainacan, ao criar um metadado, selecione Data flexível como tipo
- Para habilitar filtro de busca, adicione um filtro no metadado escolhendo Intervalo de data flexível
Requisitos
- WordPress 6.0+
- PHP 8.0+
- Tainacan instalado e ativo
Estrutura
tainacan-flexible-date/
├── tainacan-flexible-date.php Bootstrap
├── uninstall.php Limpeza
├── includes/
│ ├── class-plugin.php Bootstrap (registra hooks)
│ ├── class-flexible-date.php Tipo de metadado
│ ├── class-flexible-date-interval.php Tipo de filtro
│ ├── class-normalizer.php Conversão de formatos
│ ├── class-storage.php Postmeta canônicas
│ └── class-query-hook.php Reescrita de meta_query
└── assets/js/
├── metadata-type-flexible-date.js Vue: input do metadado
├── metadata-form-flexible-date.js Vue: opções do tipo
└── filter-flexible-date-interval.js Vue: filtro de busca
Conformidade com a documentação Tainacan
Implementação baseada em:
- Creating Metadata Type — hooks
tainacan-register-metadata-typeetainacan-register-vuejs-component, props obrigatóriasitemMetadatum/value/disabled, registro emwindow.tainacan_extra_components - Creating Filter Type (página marcada TODO na wiki) — segue o mesmo padrão estrutural, com hook
tainacan-register-filter-typee classe estendendo\Tainacan\Filter_Types\Filter_Type
Licença
GPL-3.0+