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

Segurança Profunda em Plugins WordPress

Segurança Profunda em Plugins WordPress

Descubra como aplicar segurança real nos seus plugins WordPress e proteger dados, ações e reputação.

Como Tratar Erros e Exceptions em Plugins WordPress do Jeito Certo

Tratamento de Erros e Uso Inteligente de Exceptions em Plugins WordPress

Aprenda a criar exceções personalizadas, capturar erros com contexto e registrar falhas com elegância em seus plugins WordPress

Como Implementar um Sistema de Logs Profissional em Plugins WordPress

Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)

Aprenda a criar um sistema de gerenciamento de erros e logs para plugins WordPress, elevando a qualidade e profissionalismo dos seus projetos

Como Criar um Bloco WordPress com Filtro por Múltiplas Categorias

Bloco de Posts com Filtro por Múltiplas Categorias

Aprenda a criar um bloco Gutenberg com filtro por múltiplas categorias no WordPress. Ideal para projetos profissionais e sites dinâmicos!

Como Filtrar Posts por Categoria em um Bloco Gutenberg

Filtrando Posts por Categoria no Editor do Bloco

Aprenda a criar um bloco personalizado em WordPress que exibe os últimos posts com filtro por categoria. Ideal para projetos dinâmicos com Gutenberg

Como Criar um Bloco Dinâmico no WordPress com Renderização PHP

Bloco Dinâmico com Renderização no Servidor

Aprenda a criar um bloco Gutenberg que carrega posts no editor e renderiza via PHP no frontend. Estrutura profissional com render_callback!

Comentários

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!