WooCommerce Bookings: Exibir Detalhes de Reserva com Shortcode

Este snippet permite exibir os detalhes completos de uma reserva do WooCommerce com base no ID do pedido fornecido na URL. Inclui informações sobre o pedido, cliente e detalhes específicos da reserva, oferecendo uma visão abrangente e fácil de entender para os usuários.

 

0
				
					function get_booking_status_name($status) {
    $statuses = [
        'pending'    => 'Pendente',
        'confirmed'  => 'Confirmado',
        'paid'       => 'Pago',
        'unpaid'     => 'Não Pago',
        'cancelled'  => 'Cancelado',
        'complete'   => 'Completo',
    ];
    return isset($statuses[$status]) ? $statuses[$status] : $status;
}

function get_person_type_name($person_type_id) {
    $person_types = [
        6414 => 'Crianças',
        6415 => 'Adultos',
    ];
    return isset($person_types[$person_type_id]) ? $person_types[$person_type_id] : 'Desconhecido';
}

function wc_booking_details_shortcode() {
    if ( ! isset( $_GET['pedido'] ) ) {
        return '<p>ID do pedido não fornecido.</p>';
    }

    $order_id = intval( $_GET['pedido'] );
    $order = wc_get_order( $order_id );

    if ( ! $order ) {
        return '<p>Pedido não encontrado.</p>';
    }

    // Recuperar dados da reserva associada ao pedido
    $booking_ids = WC_Booking_Data_Store::get_booking_ids_from_order_id( $order_id );

    if ( empty( $booking_ids ) ) {
        return '<p>Reserva não encontrada para este pedido.</p>';
    }

    $booking_id = $booking_ids[0]; // Assumindo que há apenas uma reserva por pedido
    $booking = new WC_Booking( $booking_id );

    // Recuperar dados do cliente
    $customer_id = $order->get_customer_id();
    $customer = new WP_User( $customer_id );

    // Recuperar dados adicionais do cliente
    $customer_email = $customer->user_email;
    $customer_phone = get_user_meta( $customer_id, 'billing_phone', true );
    $customer_cpf = get_user_meta( $customer_id, 'billing_cpf', true ); // Presumindo que o CPF está salvo como 'billing_cpf'

    // Recuperar dados específicos da reserva
    $persons = $booking->get_persons();

    // Verificar se o produto é reservável e está ativo/publicado
    $product = $booking->get_product();
    if ( $product && $product->get_type() === 'accommodation-booking' && $product->is_visible() ) {
        $product_name = $product->get_name();
    } else {
        $product_name = 'N/D';
    }

    ob_start();
    ?>
    <div class="wc-booking-details">
        <h2>Detalhes da Reserva n° </h2>

        <div class="booking-section">
            <h3>Detalhes Gerais</h3>
            <table>
                <tr>
                    <td><strong>ID do Pedido:</strong></td>
                    <td> – get_date_created() ) ); ?></td>
                </tr>
                <tr>
                    <td><strong>Data de criação:</strong></td>
                    <td>get_date_created() ) ); ?> @ get_date_created() ) ); ?></td>
                </tr>
                <tr>
                    <td><strong>Estado da Reserva:</strong></td>
                    <td>get_status() ); ?></td>
                </tr>
                <tr>
                    <td><strong>Cliente:</strong></td>
                    <td>display_name; ?> (#)</td>
                </tr>
                <tr>
                    <td><strong>Email:</strong></td>
                    <td></td>
                </tr>
                <tr>
                    <td><strong>Telefone:</strong></td>
                    <td></td>
                </tr>
                <tr>
                    <td><strong>CPF:</strong></td>
                    <td></td>
                </tr>
            </table>
        </div>

        <div class="booking-section">
            <h3>Especificação da Reserva</h3>
            <table>
                <tr>
                    <td><strong>Produto reservado:</strong></td>
                    <td></td>
                </tr>
                <tr>
                    <td><strong>ID da reserva pai:</strong></td>
                    <td>get_parent_id() ? $booking->get_parent_id() : 'N/A'; ?></td>
                </tr>
            </table>
        </div>

        <div class="booking-section">
            <h3>Pessoa(s)</h3>
            <table>
                
                     $count ) : ?>
                        <tr>
                            <td><strong>:</strong></td>
                            <td></td>
                        </tr>
                    
                
                    <tr>
                        <td><strong>Pessoas:</strong></td>
                        <td>Não especificado</td>
                    </tr>
                
            </table>
        </div>

        <div class="booking-section">
            <h3>Horário e data da reserva</h3>
            <table>
                <tr>
                    <td><strong>Data inicial:</strong></td>
                    <td>get_start() ); ?></td>
                </tr>
                <tr>
                    <td><strong>Data final:</strong></td>
                    <td>get_end() ); ?></td>
                </tr>
                <tr>
                    <td><strong>Reserva para o dia todo:</strong></td>
                    <td>is_all_day() ? 'Sim' : 'Não'; ?></td>
                </tr>
            </table>
        </div>
    </div>
    <?php
    return ob_get_clean();
}
add_shortcode( 'wc_booking_details', 'wc_booking_details_shortcode' );

				
			

Quer ajuda de um especialista para implementar?

Instruções de Uso

Este snippet cria um shortcode [wc_booking_details] que exibe os detalhes de uma reserva do WooCommerce baseada no ID do pedido fornecido na URL. Inclui informações sobre o pedido, cliente e detalhes da reserva.

Como funciona:

  1. Funções Auxiliares:
    • get_booking_status_name($status): Converte o status da reserva em um nome legível.
    • get_person_type_name($person_type_id): Converte o ID do tipo de pessoa em um nome legível.
  2. Função do Shortcode:
    • function wc_booking_details_shortcode() { ... }: Define a função wc_booking_details_shortcode que gera o HTML para os detalhes da reserva.
  3. Verificação e Recuperação do Pedido:
    • if ( ! isset( $_GET['pedido'] ) ) { ... }: Verifica se o ID do pedido foi fornecido na URL.
    • $order_id = intval( $_GET['pedido'] );: Obtém o ID do pedido da URL.
    • $order = wc_get_order( $order_id );: Recupera o pedido pelo ID.
  4. Verificação e Recuperação da Reserva:
    • $booking_ids = WC_Booking_Data_Store::get_booking_ids_from_order_id( $order_id );: Recupera os IDs das reservas associadas ao pedido.
    • $booking = new WC_Booking( $booking_id );: Recupera os detalhes da reserva.
  5. Recuperação de Dados do Cliente:
    • $customer_id = $order->get_customer_id();: Obtém o ID do cliente.
    • $customer = new WP_User( $customer_id );: Recupera os detalhes do cliente.
    • $customer_email = $customer->user_email;: Recupera o email do cliente.
    • $customer_phone = get_user_meta( $customer_id, 'billing_phone', true );: Recupera o telefone do cliente.
    • $customer_cpf = get_user_meta( $customer_id, 'billing_cpf', true );: Recupera o CPF do cliente.
  6. Recuperação de Dados Específicos da Reserva:
    • $persons = $booking->get_persons();: Recupera o número de pessoas na reserva.
    • $product = $booking->get_product();: Recupera o produto reservado.
  7. Geração do HTML:
    • Utiliza ob_start() e ob_get_clean() para capturar o HTML gerado e retornar como string.
    • Estrutura o HTML em seções para exibir os detalhes gerais, especificações da reserva, informações das pessoas e horários/datas da reserva.
  8. Registro do Shortcode:
    • add_shortcode( 'wc_booking_details', 'wc_booking_details_shortcode' );: Registra o shortcode [wc_booking_details] no WordPress.

Instruções de Uso

  1. Adicione o código ao arquivo functions.php do seu tema ou em um plugin específico.
  2. Use o shortcode [wc_booking_details] em uma página ou post onde deseja exibir os detalhes da reserva.
  3. Certifique-se de que a URL inclui o parâmetro pedido com o ID do pedido, por exemplo: https://seusite.com/sua-pagina?pedido=1234.

Outros Snippets

WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para uma página específica (não a página de login).
WordPress
Este snippet redireciona todos os visitantes do site que não estejam logados para a página de login do WordPress. Isso é útil se você deseja restringir o acesso ao conteúdo do seu site apenas para usuários autenticados.
WordPress
Este snippet cria um shortcode que exibe uma avaliação por estrelas baseada em um campo personalizado de um post no WordPress.

Últimos Posts

Como Criar um Tema WordPress Simples do Zero

Como Criar um Tema WordPress Simples do Zero

Aprenda como estruturar um tema básico no WordPress e entenda os arquivos principais e os templates comuns necessários

Anatomia de um Tema Avançado no WordPress

Anatomia de um Tema Avançado no WordPress

Conheça estrutura de um tema avançado, com foco nos arquivos essenciais e na hierarquia de templates, usando o Twenty Twenty-Three como exemplo

Onde Fica o HTML do WordPress? Perguntas Frequentes #006

Onde Fica o HTML do WordPress? Perguntas Frequentes #006

vamos abordar as principais questões sobre HTML no WordPress e responder algumas dúvidas frequentes, incluindo perguntas específicas de inscritos no nosso canal no YouTube

Configurações Essenciais no .htaccess para Proteger Seu WordPress

Configurações Essenciais no .htaccess para Proteger Seu WordPress

Aprenda como usar o .htaccess para melhorar a segurança do WordPress, bloqueando arquivos, diretórios e configurando restrições

Protegendo o Arquivo wp-config.php Segurança Avançada para WordPress

Protegendo o Arquivo wp-config.php: Segurança Avançada para WordPress

Vamos explorar duas estratégias eficazes para proteger o arquivo wp-config.php: movê-lo para fora do diretório público e configurar permissões restritivas.

Senhas Fortes e 2FA: Proteja Seu WordPress Contra Acessos Não Autorizados

Senhas Fortes e 2FA: Proteja Seu WordPress Contra Acessos Não Autorizados

Senhas fortes e autenticação em dois fatores (2FA) são essenciais para proteger seu site contra invasões e acessos não autorizados

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Você precisa estar logado para ver esta informação.

Adicione seu Snippet

Título *
Resumo *
Descrição Completa *
Código *
Instruções de uso *

Solicitar Orçamento

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!