Ad Code

Responsive Advertisement

Desenvolvendo Funcionalidades no Site Unintegrativa

 


Gostaria de compartilhar algumas das funcionalidades que implementei no site Unintegrativa. Essas funcionalidades foram criadas para melhorar a experiência dos usuários e facilitar a administração do site. Vamos explorar essas funcionalidades em detalhes.


1. Modificação do Template de Portfólio

Uma das principais melhorias que fiz no site foi a modificação do template de portfólio. Nesse processo, criei botões que podem ser controlados diretamente pelo administrador e que refletem no front-end do site.

Seção 1: Informações sobre o Curso

Na administração do WordPress, criei uma seção chamada “Informações sobre o Curso”. Dentro dessa seção, temos os seguintes controles:

Aba 1: Sobre o Curso

Modalidade do Curso: O administrador pode escolher entre Ao Vivo, Gravada, E-book ou Híbrido. Apenas uma opção pode ser selecionada.

  • O Curso é: O administrador pode marcar se o curso é pago ou gratuito.
  • Carga Horária: Um campo de texto para inserir a carga horária do curso.
  • Público Alvo: Um campo de texto para descrever o público-alvo.
  • Produto da Loja: Esse campo permite fazer um link direto para um produto já cadastrado no WooCommerce.

Aba 2: Data do Curso

  • Data: Um seletor de data para definir a data do curso.
  • Hora: Um seletor de hora para definir o horário do curso.

Código do painel de Informações:

<?php
if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_6125993f9cb6f',
    'title' => 'Informações sobre o curso:',
    'fields' => array(
        array(
            'key' => 'field_61297349dfd1d',
            'label' => 'Sobre o curso',
            'name' => '',
            'type' => 'accordion',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'open' => 1,
            'multi_expand' => 1,
            'endpoint' => 0,
        ),
        array(
            'key' => 'field_6129ac2e43a46',
            'label' => 'Modalidade do curso',
            'name' => 'modalidade_do_curso',
            'type' => 'radio',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '40',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'choices' => array(
                'Ao vivo' => 'Ao vivo',
                'Gravado' => 'Gravado',
                'E-Book' => 'E-Book',
                'Hibrido' => 'Hibrido',
            ),
            'allow_null' => 0,
            'other_choice' => 0,
            'default_value' => '',
            'layout' => 'horizontal',
            'return_format' => 'value',
            'save_other_choice' => 0,
        ),
        array(
            'key' => 'field_612cc791f5f2a',
            'label' => 'O curso é:',
            'name' => 'o_curso_e:',
            'type' => 'radio',
            'instructions' => '',
            'required' => 1,
            'conditional_logic' => array(
                array(
                    array(
                        'field' => 'field_6129ac2e43a46',
                        'operator' => '!=',
                        'value' => 'E-Book',
                    ),
                ),
            ),
            'wrapper' => array(
                'width' => '40',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'choices' => array(
                'Curso Pago' => 'Curso Pago',
                'Curso Gratuito' => 'Curso Gratuito',
            ),
            'allow_null' => 0,
            'other_choice' => 0,
            'default_value' => '',
            'layout' => 'horizontal',
            'return_format' => 'value',
            'save_other_choice' => 0,
        ),
        array(
            'key' => 'field_6127d261b719c',
            'label' => 'Carga horária',
            'name' => 'carga_horaria',
            'type' => 'text',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => array(
                array(
                    array(
                        'field' => 'field_6129ac2e43a46',
                        'operator' => '!=',
                        'value' => 'E-Book',
                    ),
                ),
            ),
            'wrapper' => array(
                'width' => '20',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'default_value' => '',
            'placeholder' => 'Informe a carga horária do curso:',
            'prepend' => '',
            'append' => '',
            'maxlength' => '',
        ),
        array(
            'key' => 'field_6125998d1dccf',
            'label' => 'Público Alvo',
            'name' => 'Público Alvo',
            'type' => 'text',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => array(
                array(
                    array(
                        'field' => 'field_6129ac2e43a46',
                        'operator' => '!=',
                        'value' => 'E-Book',
                    ),
                ),
            ),
            'wrapper' => array(
                'width' => '50',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'default_value' => '',
            'placeholder' => 'Descreva o público alvo:',
            'prepend' => '',
            'append' => '',
            'maxlength' => '',
        ),
        array(
            'key' => 'field_6129bd775ee86',
            'label' => 'Produto da Loja',
            'name' => 'produto',
            'type' => 'post_object',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => array(
                array(
                    array(
                        'field' => 'field_612cc791f5f2a',
                        'operator' => '==',
                        'value' => 'Curso Pago',
                    ),
                ),
            ),
            'wrapper' => array(
                'width' => '50',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'post_type' => array(
                0 => 'product',
            ),
            'taxonomy' => '',
            'allow_null' => 0,
            'multiple' => 1,
            'return_format' => 'id',
            'ui' => 1,
        ),
        array(
            'key' => 'field_61296f7360979',
            'label' => 'Data do Curso',
            'name' => '',
            'type' => 'tab',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => array(
                array(
                    array(
                        'field' => 'field_6129ac2e43a46',
                        'operator' => '==',
                        'value' => 'Ao vivo',
                    ),
                ),
                array(
                    array(
                        'field' => 'field_6129ac2e43a46',
                        'operator' => '==',
                        'value' => 'Hibrido',
                    ),
                ),
            ),
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'placement' => 'top',
            'endpoint' => 0,
        ),
        array(
            'key' => 'field_6129b3e1fd55b',
            'label' => 'Data',
            'name' => 'data',
            'type' => 'date_picker',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '20',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'display_format' => 'd/m/Y',
            'return_format' => 'd/m/Y',
            'first_day' => 1,
        ),
        array(
            'key' => 'field_613ea4def7066',
            'label' => 'Hora',
            'name' => 'hora',
            'type' => 'time_picker',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '20',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'display_format' => 'g:i a',
            'return_format' => 'H:i:s',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'portfolio',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => array(
        0 => 'discussion',
        1 => 'slug',
        2 => 'page_attributes',
        3 => 'send-trackbacks',
    ),
    'active' => true,
    'description' => '',
    'show_in_rest' => 0,
));

endif;{codeBox}

Seção 2: Gestão das Ferramentas da Página

Essa seção é exclusiva e contém botões seletivos para controlar as seguintes funcionalidades:

  • Barra Lateral: O administrador pode escolher entre Exibir ou Ocultar a barra lateral.
  • Contador: O administrador pode escolher entre Exibir ou Ocultar um contador.
  • Guia de Preço: O administrador pode escolher entre Exibir ou Ocultar o guia de preço.

Código da Ferramentas de Página 

<?php
if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array(
    'key' => 'group_613e688dc0468',
    'title' => 'Gestão das ferramentas da pagina',
    'fields' => array(
        array(
            'key' => 'field_613e6ad22c58e',
            'label' => 'Barra Lateral',
            'name' => 'Ocbarra',
            'type' => 'true_false',
            'instructions' => 'Oculta a barra lateral',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'message' => '',
            'default_value' => 1,
            'ui' => 1,
            'ui_on_text' => 'Exibir',
            'ui_off_text' => 'Ocultar',
        ),
        array(
            'key' => 'field_613e932c68e6d',
            'label' => 'Contador',
            'name' => 'Occontador',
            'type' => 'true_false',
            'instructions' => 'Oculta contador do fim da Página',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 0,
            'readonly' => 0,
            'message' => '',
            'default_value' => 1,
            'ui' => 1,
            'ui_on_text' => 'Exibir',
            'ui_off_text' => 'Ocultar',
        ),
        array(
            'key' => 'field_63a9c310756ee',
            'label' => 'Guia de Preço',
            'name' => 'guia_de_preco',
            'aria-label' => '',
            'type' => 'true_false',
            'instructions' => 'Ocultar guia de Preço',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'formula' => '',
            'calculated_format' => '',
            'blank_if_zero' => 1,
            'readonly' => 0,
            'message' => '',
            'default_value' => 1,
            'ui_on_text' => 'Exibir',
            'ui_off_text' => 'Ocultar',
            'ui' => 1,
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'portfolio',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'side',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => true,
    'description' => '',
    'show_in_rest' => false,
));

endif;{codeBox}


2. Comportamento Dinâmico dos Campos

Os campos da seção 1 (Sobre o Curso) se comportam de maneira dinâmica com base na modalidade selecionada:

  • Modo Ao Vivo ou Híbrido: Todos os campos estão disponíveis.
  • Modo Gravado: Apenas os campos O Curso é, Carga Horária, Público Alvo e Produto da Loja estão disponíveis.
  • Modo E-book: Todos os campos ficam ocultos.
Além disso, se o campo O Curso é for marcado como Curso Gratuito, o seletor de Produto da Loja é ocultado.


Código do comportamento do campo no Front:

<?php

//Shortcod ocultar barra Lateral
function ocutbarra(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
        $acfmod = get_field('Ocbarra');

        $output= '';
        if ($acfmod == "1")
        {
         $output = "exibir";
        }
        else {
              $output = "ocultar";
        }
        return $output;
}
add_shortcode( 'ocutbarralat', 'ocutbarra' );

//Shortcod mudança do texto de dias referente ao acf modalidade
function acfmodalidade(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
            $acfmod = get_field('modalidade_do_curso');
            $acfdata = get_field('data');
            $horaacfmeta = get_post_meta(get_the_id(),'hora',true); //Retorna do Valor do ACF Hora em Modelo Metadado
                $dataacfmeta = get_post_meta(get_the_id(),'data',true);

        $output= '';
        if ($acfmod == "Gravado")
        {
         $output = "Início Imediato!";
        }
        else {
              $output = "Data: " .$acfdata ." às " .$horaacfmeta ;
        }
        return $output;
}
add_shortcode( 'acfdata', 'acfmodalidade' );

//Shortcod mudança do botão do texto
function botinscrito(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
            $acfmod = get_field('o_curso_e:');

        $output= '';
        if ($acfmod == "Curso Gratuito")
        {
         $output = "Inscreva-se!";
        }
        else {
              $output = "Compre agora";
        }
        return $output;
}
add_shortcode( 'botinscrito', 'botinscrito' );

function botinscritourl(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
            $acfmod = get_field('o_curso_e:');

        $output= '';
        if ($acfmod == "Curso Gratuito")
        {
         $output = "#gratuito";
        }
        else {
              $output = "#preco";
        }
        return $output;
}
add_shortcode( 'botinscritourl', 'botinscritourl' );

//Shortcod ocultar contador
function ocutcontador(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
        $acfmod = get_field('Occontador');
        $acfmod2 = get_field('modalidade_do_curso');
   
   
        $output= '';
        if ($acfmod == 1)
        {
          if ($acfmod2 == 'Ao vivo')
          {
            $output = "exibir";
          }
          else {
          $output = "ocultar";
          }
        }
        else {
          $output = "ocultar";
        }
        return $output;
    }
    add_shortcode( 'ocutcontinf', 'ocutcontador' );
   
   
    // Shortcord data completa
    function timeZone_funch( $atts )
    {
        extract(shortcode_atts(array('timezone'    => 'America/Sao_Paulo'), $atts));
    /* America/Sao_Paulo is default Timezone */
        $output             = '';
        if (in_array($timezone, DateTimeZone::listIdentifiers()))
        {
            date_default_timezone_set($timezone);
            $currentTime = date( 'd-m-Y h:i:s A');
            $output = $currentTime;
        }
        else {
            $output = "Invalid Timezone";
        }
   
        return $output;
    }
    add_shortcode( 'current_time', 'timeZone_funch' );
   
    //Shortcood data
   
    function displaydate(){
      extract(shortcode_atts(array('timezone'    => 'America/Sao_Paulo'), $atts));
    /* America/Sao_Paulo is default Timezone */
        $output             = '';
        if (in_array($timezone, DateTimeZone::listIdentifiers()))
        {
            date_default_timezone_set($timezone);
            $currentTime = date( 'd/m/Y ');
            $output = $currentTime;
        }
        else {
            $output = "Invalid Timezone";
        }
   
        return $output;
    }
    add_shortcode( 'date', 'displaydate' );
   
   
    //Shortcood hora
   
    function displayhora(){
    extract(shortcode_atts(array('timezone'    => 'America/Sao_Paulo'), $atts));
    /* America/Sao_Paulo is default Timezone */
        $horasistema = '';
        if (in_array($timezone, DateTimeZone::listIdentifiers()))
        {
            date_default_timezone_set($timezone);
            $horasistema = date( 'H:i:s');
        }
        else {
            $horasistema = "Invalid Timezone";
        }
   
        return $horasistema;
    }
    add_shortcode( 'hora', 'displayhora' );
   
   
    //Shortcod mostrar se for pago
    function ocbpreco(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
        $acfmod = get_field('o_curso_e:');
        $acfpreco = get_field('guia_de_preco');
   
   
        $output= '';
        if ($acfmod == "Curso Pago")
        {
           
          if ($acfpreco == "0")
          {    
             $output = "ocultar";
          }
          else {
           $output = "exibir";
          }    
           
        }
        else {
          $output = "ocultar";
        }
        return $output;
    }
    add_shortcode( 'ocbpreco', 'ocbpreco' );
   
    //Shortcod mostrar se for gratuito
    function ocbgratuito(){
        //Retorna o campo da Data referente ao post que o shortcode está sendo solicitado
        $acfmod = get_field('o_curso_e:');
   
        $output= '';
        if ($acfmod == "Curso Gratuito")
        {
         $output = "exibir";
        }
        else {
          $output = "ocultar";
        }
        return $output;
    }
    add_shortcode( 'ocbgratuito', 'ocbgratuito' );
   
    //Shortcod oculta a guia certificado se for ebook
    function ocbcertificado(){
        //Retorna o campo modalidade do curso
        $acfmod = get_field('modalidade_do_curso');
   
        $output= '';
        if ($acfmod == "E-Book")
        {
         $output = "ocultar";
        }
        else {
          $output = "exibir";
        }
        return $output;
    }
    add_shortcode( 'ocbcertificado', 'ocbcertificado' );
   
   {codeBox}

3. Exibição no Front-End

Todos os campos configurados na administração do site refletem no front-end. Por exemplo:

  • Público Alvo: Enfermeiros e Acadêmicos de Enfermagem do último período.
  • Carga Horária: 80 horas.
  • Data de Início: 18/09/2022 às 00:00:00.
  • Compre Agora: Link para o produto.

4. Automação do Contador de Tempo

Uma automação que me tomou muito tempo foi a criação de um contador de tempo. Esse contador é baseado na data cadastrada na administração do site e é exibido no front-end. Por exemplo:

Se a data do evento for definida como 01/08/2024 às 09:00 PM e a data atual for 22/05/2024 às 1:29 PM, o contador mostrará: Tempo até o Evento:

  • 71 dia(s)
  • 3 hora(s)
  • 27 minuto(s)

Quando o prazo acabar, o texto mudará para “Evento Encerrado”.


Código da que realiza os cálculos:

function contagemregressiva(){
       $output = '';
         if (in_array($timezone, DateTimeZone::listIdentifiers()))
                {
                    date_default_timezone_set($timezone);
                    $currentTime = date( 'Y-m-d H:i:s');
                    $output = $currentTime;
                }
                else {
                    $output = "Invalid Timezone";
                }
        #Informamos as datas e horários de início e fim no formato Y-m-d H:i:s e os convertemos para o formato timestamp
        $horaacfmeta = get_post_meta(get_the_id(),'hora',true); //Retorna do Valor do ACF Hora em Modelo Metadado
        $dataacfmeta = get_post_meta(get_the_id(),'data',true);
        $junto = $dataacfmeta .$horaacfmeta;
       
        $dia_hora_atual = strtotime(date("Y-m-d H:i:s"));
        $dia_hora_evento = strtotime(date($junto));
        #Achamos a diferença entre as datas...
        $diferenca = $dia_hora_evento - $dia_hora_atual;
        #Fazemos a contagem...
        $dias = intval($diferenca / 86400);
        $marcador = $diferenca % 86400;
        $hora = intval($marcador / 3600);
        $marcador = $marcador % 3600;
        $minuto = intval($marcador / 60);
        $segundos = $marcador % 60;
        #Exibimos o resultado
   
         if ($minuto <= 0 )
                 {
                     return "Evento Encerrado";
                 }
                 else {
                     //return "$dias dia(s) $hora hora(s) $minuto minuto(s) $segundos segundo(s)";
                     return "$dias dia(s) $hora hora(s) $minuto minuto(s)";
                 }
       
}
add_shortcode( 'contagemregressiva', 'contagemregressiva' );{codeBox}

Este relato marca apenas o início da jornada de inovações que implementei no site Unintegrativa. Com as funcionalidades descritas, busquei não apenas melhorar a interatividade e a gestão do site, mas também proporcionar uma experiência mais rica e personalizada para os usuários.

As automações e controles que desenvolvi são um testemunho do potencial que a tecnologia oferece para transformar a educação online. Estou ansioso para compartilhar mais sobre esse projeto e outras funcionalidades que estão em desenvolvimento. Fiquem atentos para mais atualizações e histórias de sucesso do Portal Acadêmico da Unintegrativa.


Acesse todos as automações pelo meu Git: Clique aqui

Receba nossas atualizações

* obrigatório
Seu melhor e-mail

Postar um comentário

0 Comentários

Ad Code

Responsive Advertisement

Uma parceria de projetos incríveis

Vamos começar um Projeto Juntos?

Solicite orçamento

Seu projeto merece ficar em boas mãos, conte comigo para isso. Tem todas informações e está preparado? Então vamos começar!

🔒 Ao enviar o formulário, eu declaro que estou de acordo com a Política de Privacidade.