Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sistema de anúncios #11

Closed
10 of 11 tasks
jnz93 opened this issue Mar 20, 2022 · 10 comments
Closed
10 of 11 tasks

Sistema de anúncios #11

jnz93 opened this issue Mar 20, 2022 · 10 comments

Comments

@jnz93
Copy link
Owner

jnz93 commented Mar 20, 2022

Sistema de anúncios

Anúncios servem para impulsionar visualizações e cliques em botões de contato do acompanhante. Anúncios serão mostrados em páginas de buscas, carousel de perfis e páginas de perfis de concorrentes. Pacotes de anúncios/vantagens adquiridos concederam uma quantidade de Pontos de Ranking, esses pontos serão considerados quando tivermos anúncios do mesmo plano, o perfil com maior pontuação terá preferência.

Regras

  • Anúncios publicados devem ser vinculados ao ID do usuário. Salvar em user_metas.
  • Anúncios terão data de validade correspondente ao tempo do pacote de vantagem adquirido.
  • Acompanhantes podem adquirir todos os pacotes de vantagens disponíveis, pois cada pacote corresponde a um tipo de anúncio diferente do outro.
  • Anúncios ficarão disponíveis para publicação no painel da conta do usuário após a confirmação do pagamento.
  • Cada anúncio deve receber uma taxonomia que vai corresponder ao tipo de pacote adquirido(prata, ouro ou diamante). A taxonomia deve ser salva automaticamente na criação do rascunho, essa opção não ficará disponível para edição.
  • O usuário poderá configurar textos, imagens e dados na edição do anúncio.
  • Anúncios não poderão ser editados após publicados.
  • Dados estatísticos como visualizações, cliques em botões, etc... devem ser salvos em post_metas do anúncio.

Pontos de Ranking

Um sistema de pontuação para promover fidelidade na compra de planos recorrentes ou com maior prazo. Esses pontos serão levados em consideração na disputa entre anúncios do mesmo plano, perfis com maior pontuação devem ter leve vantagem que resultará em mais views.

O Algoritmo deve ser desenhado

Desenvolvimento

  • Desenhar modelo dos anúncios

    Modelos para os tipos de anúncios descritos na thread abaixo. Desenhar modelos para Desktop e Mobile.

  • Ciclo de compra, edição, publicação e expiração do anúncio

    Fluxo de anúncios

  • Criar custom post type: a2_advertisement

    Os anúncios são posts que serão disponibilizados para publicação aos acompanhantes que adquirirem algum pacote de vantagem disponível na loja.

    • Compartilhar taxonomias do CPT a2_escort
    • Desenvolver template dos anúncios

      Com base no design dos cards criar os templates em arquivos distintos.

    • Desenvolver Shortcode Carousel de Anúncios [advCarousel pais="" estado="" cidade="" bairro="" qtd=""]

      Além da lógica também faz parte do processo desenvolver os templates relacionados ao shortcode.

    • Desenvolver Shortcode p/ Listagem de Anúncios [advList pais="" estado="" cidade="" bairro="" qtd=""]

      Além da lógica também faz parte do processo desenvolver os templates relacionados ao shortcode. Este shortcode é semelhante ao [advCarousel] a diferença é que os cards são apresentados conforme o nível do anúncio(prata, ouro e diamante).

    • Rotina diária para mover anúncios expirados para lista de finalizados

      Essa rotina é importante pq remove o anúncio da lista de ativos.

    • Desenvolver lógica de publicação do Anúncio

      Rotina de publicação de anúncios conforme a confirmação do pagamento do pedido.

Adaptação Woocommerce

  • Criar produtos para os planos no woocommerce

    Vamos utilizar o woocommerce para comercializar os planos. Para isso vamos utilizar "produtos variáveis" onde podemos configurar atributos e opções de preços variados. Produto variável

    • Produtos receberam valores para cada período disponível(15, 30 e 90 dias)
    • Salvar o em um meta-campo o tempo período contratado pelo usuário
    • O tempo contratado será utilizado para calcular a data expiração do anúncio públicado.

Painel da conta

  • Adicionar menu e página "Anúncios"

    Está página receberá o histórico de anúncios

@jnz93
Copy link
Owner Author

jnz93 commented Mar 21, 2022

Pacotes de anúncios

Pacotes de anúncios serão produtos do woocommerce. Cada produto deverá receber um valor específico que será correspondente ao tempo em dias ou horas. Esse tempo será utilizado para calcular o tempo de expiração do post anúncio do acompanhante. Dessa forma podemos manter o controle das "assinaturas" dos pacotes sem a necessidade de grandes modificações no ecossistema de produtos do woocommerce.

  • Plano A2 Prata

    • Anúncio simples - Tamanho normal
    • Informações básicas
    • Botão "Visitar perfil"
    • Anúncio com 1 fotos
    • +100 pontos de ranking
  • Plano A2 Ouro

    • Anúncio simples - Tamanho normal
    • Informações básicas
    • Botão "Converse comigo"
    • Cor exclusiva de destaque
    • Anúncio com até 1 Fotos
    • +200 pontos de ranking
  • Plano A2 Diamante

    • Anúncio Custom - Tamanho grande
    • Informações básicas
    • Botão "Converse comigo"
    • Anúncio com galeria de até 12 fotos
    • Anúncio simples no perfil de concorrentes(cidade, estado, etc..)
    • +400 Pontos de ranking

@jnz93

This comment was marked as off-topic.

@jnz93
Copy link
Owner Author

jnz93 commented Apr 14, 2022

Fluxo de compra a publicação

O cliente pode adquirir pacotes de anúncios a partir da loja do site, que é gerenciada com woocommerce. O fluxo da compra segue o padrão da ferramenta. Após a confirmação do pagamento, pelo gateway, o status do pedido é alterado para Processando, nesse momento uma ação é disparada para publicar o anúncio, sem a necessidade de interação humana no processo, após a publicação do anúncio uma outra ação é disparada para alterar o status do pedido para concluído.

Após a publicação, o anúncio fica disponível em buscas e listagens do site. A validade do anúncio começa a contar a partir do momento da publicação. Ao expirar a validade ele é desvinculado do site e seu status é alterado para rascunho. Ficando
disponível apenas para o cliente em sua página de anúncios. Anúncios finalizados não podem ser editados ou reativados.

As informações utilizadas no anúncio são as mesmas configuradas no perfil do usuário. Ou seja, coisas como nome, gênero, valores, fotos, etc... são captadas do próprio perfil.

O pedido fica disponível a partir do menu "Faturas" no painel da conta do cliente.

Considerações

  • Apenas um plano pode ser adquirido por vez.
  • Enquanto um plano estiver ativo outro não poderá ser comprado.
  • Anúncios e páginas de perfis são duas "coisas" diferentes. Ou seja, uma coisa não está vinculada a outra diretamente, apenas como referência para links. Ambas pertencem ao dono da conta.

Informações Técnicas

  • Meta Key User _activated_advertisements: Salvar o ID do anúncio ativo em um array
  • Meta Key Post _plan_duration: Recebe a duração do anúncio adquirido.
  • Meta Key Post _expiration_date: Recebe a data de expiração do anúncio(formato timestamp)
  • Taxonomia: advertisement_level: Disponível apenas para anúncios. Utilizada para setar o nível do anúncio(prata, ouro ou diamante). Essa lista pode aumentar conforme os pacotes de anúncios disponíveis.
  • A taxonomia advertisement_level foi substituída pelo meta post _plan_level. Isso porque temos determinadas regras na $query que não eram possíveis com a taxonomia.

    O nível do anúncio agora é enum. Sendo 1 = prata, 2 = ouro e 3 = diamante

@jnz93
Copy link
Owner Author

jnz93 commented Apr 18, 2022

Shortcode Carousel de Anúncios

[advCarousel pais="sigla-país" estado="sigla-estado" cidade="nome-da-cidade"]

  • País padrão Brasil(br).

Design Fixes desktop

  • Efeito Hover no card: Adicionar borda 1px solid rgba(0,0,0,.5)
  • Efeito Hover no botão "Visitar Perfil": Cor do texto #fff;

Geral

  • Corrigir número na badge do botão "Acompanhantes {localidade}"

    Utilizar o método found_posts na query. Pe: $query->found_posts; Isso retornara o total de posts;

  • Corrigir Link do botão "Acompanhantes {localidade}"
  • Formatar localização

    Se o shortcode for para cidade mostrar o bairro, se for estado mostrar cidade, se for país mostrar estado.

  • Corrigir Link do botão "Visitar Perfil"
  • Adicionar template para quando não houver anúncios na localidade

    O template deve indicar a página de cadastro

Funcionalidades

  • Criar sistema de carousel
  • Finalizar Dev. Shortcode

@jnz93
Copy link
Owner Author

jnz93 commented Apr 21, 2022

Formatando a localização de anúncios

Como identificar cada localização dentro dos termos salvos em um anúncio ou perfil?
A taxonomia de localização é organizada na ordem: País > Estado > Cidade > Bairro.

  • Dessa forma podemos deduzir que para encontrar o país nós precisamos identificar o termo que não é filho de ninguém.
  • Algo parecido com o bairro, que não é pai de ninguém.
  • Para identificar estado e cidade vamos precisar de um algoritmo mais refinado:
    • Estado: Está um nível abaixo de Países e um nível acima de Cidades
    • Cidade: Está um nível abaixo de Estados e um nível acima de Bairros

    Talvez possamos resolver isso com um algoritmo parecido com o utilizado para filtrar as localizações a partir do "parent" na edição do perfil. Também temos este tópico: https://stackoverflow.com/questions/66723856/how-to-get-terms-by-hierarchy-level

@jnz93
Copy link
Owner Author

jnz93 commented Apr 21, 2022

Sistema de carousel

Inclusão do framework owl carousel: https://owlcarousel2.github.io/OwlCarousel2/

  • Add css styles
  • Add js script
  • Configurar carousel do shortcode
  • Estilizar nav e dots do carousel

@jnz93
Copy link
Owner Author

jnz93 commented Apr 23, 2022

Shortcode p/ Listagem de Anúncios

Exemplo: [advList pais="" estado="" cidade="" bairro="" qtd=""]

Além da lógica também faz parte do processo desenvolver os templates relacionados ao shortcode. Este shortcode é semelhante ao [advCarousel] a diferença é que os cards são apresentados conforme o nível do anúncio(prata, ouro e diamante).

  • Criar método advByPlanLevel() na classe A2_Queries

    Este método é semelhante ao advByLocation, a diferença é que ele vai retornar anúncios ordenados pelo nível do plano contratado. A ordem é: Diamante > Ouro > Prata

  • Substituir a taxonomia advertisement_level pelo post meta _plan_level
    Para filtrar na ordem correta vamos utilizar "orderby=meta_value_num", seguido pela "meta_key=_plan_level" na query;
    Os planos são marcados por números começando por zero. Dessa forma teremos algo como 1=prata; 2=ouro; 3=diamante
    Dessa forma, se no futuro tivermos mais planos, comercializados basta continuar atribuindo um número de valor maior ao novo plano.
  • Criar template p/ o container dos anúncios

    Semelhante ao tpl-carousel-default.php. Aqui fazemos o loop na query e pegamos o template do card conforme o nível do anúncio.

  • Formatar informações utilizadas nos cards de anúncios
  • Finalizar Template dos cards

    Corrigir informações, adicionar o carousel nas fotos, ajustes gerais...

@jnz93

This comment was marked as resolved.

@jnz93
Copy link
Owner Author

jnz93 commented Apr 27, 2022

Fixes

Ajustes futuro.

  • Coletar campo "tem local" do perfil para mostrar ou não a informação no card.

    Este campo também precisa ser adicionado na edição do perfil do usuário

  • Limitar a 10 o número de fotos da galeria que são mostradas no anúncio.
  • No mobile: Testar 2 fotos por slider nos anúncios diamante
  • No mobile: Ajustar tamanho dos cards.
  • Adicionar botão "Carregar mais" no shortcode de listagem de anúncios pagos

    Função de paginação para carregar mais anúncios assincronamente.

  • Contabilizar e salvar pontos de ranking ao completar um pedido

    Pontos de ranking são acumulativos e devem ser salvos no $user e depois no anúncio, pois vamos utilizar como critério de ordenação.

@jnz93
Copy link
Owner Author

jnz93 commented Apr 28, 2022

Lógica de publicação de Anúncios

Após a alteração do pedido para "Processando" uma ação de publicação do anúncio deve ser disparada. Após a publicação uma ação deve ser disparada para alterar o status do pedido para Concluído;

  • Revisar lógica, dados e fluxo de publicação do anúncio

Um "hack" foi adicionado para alterar automaticamente o status do pedido para "completed" quando o pagamento for confirmado e o status for alterado para "processing". Isso se fez necessário pois nenhum hook woocommerce_order_status_processing não estava executando a publicação do anúncio como esperado.

Revisão e Bugs

  • O sistema não está disparando a ação quando o pedido altera para o status Processando;
  • Fluxo publicação: Compra do plano > Confirmação do pagamento > Publicação disparada > Alteração do status do pedido

@jnz93 jnz93 closed this as completed Apr 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant