Fala Marco, tudo bem? Cara, eu vejo ai duas formas de resolver a depender da sua necessidade.
Via front
Com alguma lib de mercado como List.js ou DataTables
Via back
1 - Cria o form com os campos Tipo (autor, data, titulo) e Ordem (crescente, decrescente)
2 - No submit do form você passa os valores escolhidos com algo como: posts?sortBy=titulo&order=desc
3 - Na página recupera esses dados e refaz a busca com os dados dinamicos
```
// 1. Pegar os valores da URL (limpando para segurança)
$order_by = isset($_GET['orderby']) ? sanitize_text_field($_GET['orderby']) : 'date';
$order = isset($_GET['order']) ? sanitize_text_field($_GET['order']) : 'DESC';
// 2. Mapear nomes da URL para campos do WordPress
$map_fields = [
'titulo' => 'title',
'autor' => 'author',
'data' => 'date'
];
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'orderby' => $map_fields[$order_by] ?? 'date',
'order' => strtoupper($order) === 'ASC' ? 'ASC' : 'DESC',
);
$query = new WP_Query($args);
Tradeoff
- No front você vai precisar trazer todos os resultados sempre, a depender do tamanho do projeto pode ser ruim ou até inviavel
- No back sempre tem que refazer a consulta, mas imagino que os campos da ordenação sejam poucos, então da para cachear
Poucos dados (< 500 itens) - front
Muitos dados / Big Data - back
Com paginação - backl