Biblioteca Virtual
Resumo
Acervo de artigos acadêmicos e materiais de referência, modelado como CPT biblioteca_virtual. Cada item possui contadores de interação (likes, views, shares), categorização por palavras-chave e idioma, e links para artigo completo (PDF ou URL externa). Acesso restrito a usuários logados.
Fontes de evidência
theme/single-biblioteca_virtual.php— template individual (~210 linhas)theme/templates/biblioteca-virtual-listagem.php— listagemtheme/templates/biblioteca-virtual.php— página índicetheme/functions/wp/ajax.php:50-143—handle_item_interaction_counter
Modelo de dados
CPT: biblioteca_virtual
| Campo ACF | Tipo | Descrição |
|---|---|---|
article__date | Date | Data de publicação do artigo |
article__author | Text | Autor(es) |
article__font | Text | Fonte/revista |
article__font_link | URL | Link da fonte |
article__content | WYSIWYG | Resumo do artigo |
artigo_completo | Select | Tipo: pdf ou link |
article__pdf | File | Arquivo PDF do artigo |
article__link | URL | Link externo do artigo |
article__related | Repeater | Artigos relacionados |
likes_counter | Number | Total de curtidas |
views_counter | Number | Total de visualizações |
shares_counter | Number | Total de compartilhamentos |
clicks_counter | Number | Total de clicks |
Taxonomias
| Taxonomy | Descrição |
|---|---|
categoria_biblioteca | Categorias da biblioteca |
palavra_chave | Palavras-chave (tags) |
library_language | Idioma do artigo (com imagem de bandeira) |
Evidência:
single-biblioteca_virtual.php:4-6— leitura delibrary_language,likes_countersingle-biblioteca_virtual.php:51-58—article__date,article__author,article__fonttaxonomy-categoria_biblioteca.php— existência do arquivo confirma a taxonomy
Acesso
- Restrito: Redireciona para login se não logado.
if(!is_user_logged_in()) { wp_redirect(wp_login_url(get_permalink())); die; }
Evidência: single-biblioteca_virtual.php:2.
Interações
Operações disponíveis
| Operação | ACF Field | User Meta | Descrição |
|---|---|---|---|
add_click | clicks_counter +1 | — | Registra clique |
add_visualization | views_counter +1 | — | Registra visualização |
add_like | likes_counter +1 | user_library_likes[] | Curtir (1x por usuário) |
remove_like | likes_counter -1 | Remove de user_library_likes[] | Descurtir |
add_share | shares_counter +1 | — | Registra compartilhamento |
remove_share | shares_counter -1 | — | Remove compartilhamento |
Regras de likes
- Um usuário só pode curtir cada post uma vez (verificado via
user_library_likesuser meta). - Descurtir verifica se o usuário já curtiu antes de decrementar.
- Contadores nunca ficam negativos (
$likes < 0 ? 0 : $likes - 1).
Evidência: ajax.php:80-143 — switch em $_POST['operation'].
Endpoint AJAX
| Action | Método | Auth | Descrição |
|---|---|---|---|
handle_item_interaction_counter | POST | ambos | Registra interação em qualquer post |
Payload:
{
"action": "handle_item_interaction_counter",
"post_id": 123,
"operation": "add_like"
}
Evidência: ajax.php:19-20.
Compartilhamento social
Links para redes sociais disponíveis no template:
- Facebook:
https://www.facebook.com/sharer/sharer.php?u={permalink} - Twitter:
https://twitter.com/share?url={permalink}&text={title} - LinkedIn:
https://linkedin.com/shareArticle?url={permalink}&title={title}
Evidência: single-biblioteca_virtual.php:75-78.
Layout do template
┌──────────────────────────────────────────┐
│ Ambientation: "Biblioteca Virtual" │
├──────────────────────┬───────────────────┤
│ Cabeçalho: │ │
│ - Data publicação │ │
│ - Idioma (bandeira) │ │
│ - Título │ │
│ - Autor / Fonte │ │
│ - 👍 X 👁 Y 🔄 Z │ │
│ - Compartilhar │ │
├──────────────────────┤ │
│ Resumo (article) │ Artigos │
│ [Artigo completo →] │ Relacionados │
│ Palavras-chave │ (card-sidebar) │
│ Compartilhar social │ │
└──────────────────────┴───────────────────┘
Frontend
- Estado do like é injetado via JS global:
window.postId = '{post_id}';
window.isLiked = true/false; - Verificação de like existente:
get_user_meta(user_id, 'user_library_likes')→in_array(post_id)
Evidência: single-biblioteca_virtual.php:105-112.
Busca
A listagem suporta busca por palavra-chave via query string:
/biblioteca-virtual/listagem?busca={palavra}
Evidência: single-biblioteca_virtual.php:92 — link para busca via palavra_chave.