Pular para o conteúdo principal

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 — listagem
  • theme/templates/biblioteca-virtual.php — página índice
  • theme/functions/wp/ajax.php:50-143handle_item_interaction_counter

Modelo de dados

CPT: biblioteca_virtual

Campo ACFTipoDescrição
article__dateDateData de publicação do artigo
article__authorTextAutor(es)
article__fontTextFonte/revista
article__font_linkURLLink da fonte
article__contentWYSIWYGResumo do artigo
artigo_completoSelectTipo: pdf ou link
article__pdfFileArquivo PDF do artigo
article__linkURLLink externo do artigo
article__relatedRepeaterArtigos relacionados
likes_counterNumberTotal de curtidas
views_counterNumberTotal de visualizações
shares_counterNumberTotal de compartilhamentos
clicks_counterNumberTotal de clicks

Taxonomias

TaxonomyDescrição
categoria_bibliotecaCategorias da biblioteca
palavra_chavePalavras-chave (tags)
library_languageIdioma do artigo (com imagem de bandeira)

Evidência:

  • single-biblioteca_virtual.php:4-6 — leitura de library_language, likes_counter
  • single-biblioteca_virtual.php:51-58article__date, article__author, article__font
  • taxonomy-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çãoACF FieldUser MetaDescrição
add_clickclicks_counter +1Registra clique
add_visualizationviews_counter +1Registra visualização
add_likelikes_counter +1user_library_likes[]Curtir (1x por usuário)
remove_likelikes_counter -1Remove de user_library_likes[]Descurtir
add_shareshares_counter +1Registra compartilhamento
remove_shareshares_counter -1Remove compartilhamento

Regras de likes

  • Um usuário só pode curtir cada post uma vez (verificado via user_library_likes user 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

ActionMétodoAuthDescrição
handle_item_interaction_counterPOSTambosRegistra 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.