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 Estilizar Blocos Gutenberg com CSS e Classes Dinâmicas

Estilizando Blocos Gutenberg com CSS e Classes Dinâmicas

Aprenda como aplicar estilos personalizados aos seus blocos Gutenberg, com atributos dinâmicos e uso correto de CSS modular no editor e frontend.

Criando Campos Dinâmicos e InspectorControls no Gutenberg

Campos Dinâmicos e InspectorControls no Gutenberg: Deixe Seu Bloco Interativo

Aprenda a criar blocos Gutenberg com campos dinâmicos usando attributes e InspectorControls. Torne seu bloco interativo com React e WordPress moderno

Criando Blocos Personalizados com Gutenberg e React

Criando Blocos Personalizados com Gutenberg e React

Aprenda a criar blocos personalizados com React no WordPress usando o editor Gutenberg e o pacote @wordpress/scripts. Desenvolvimento moderno de verdade

Como Criar Comandos WP-CLI Personalizados para Plugins

Criando Comandos WP-CLI Personalizados para Plugins WordPress

Aprenda como criar comandos WP-CLI personalizados para seu plugin WordPress, executando lógica direto no terminal. Agilize seu fluxo como um dev profissional.

Como Funciona o apply_filters no WordPress

Como Funciona o apply_filters() no WordPress (com Exemplos Práticos)

Entenda o que é o apply_filters no WordPress, como ele funciona, e como usá-lo para tornar seu código mais flexível e extensível. Inclui exemplos práticos e dicas de uso.

Criando Hooks Personalizados com do_action e apply_filters

Hooks Avançados no WordPress: apply_filters, do_action e boas práticas

Aprenda como criar hooks personalizados com do_action e apply_filters para deixar seus plugins WordPress modulares e extensíveis. Arquitetura profissional de verdade

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!