FernandoAcosta.Netdocs

Custom Post Type e status

2 min de leituraAtualizado há 1 semana

Cada lembrete é persistido como um post do tipo boleto_reminder. Esse post guarda toda a auditoria — agendamento, envios, cliques, cancelamentos. Conhecer a estrutura ajuda a montar relatórios e debugging.

Post type boleto_reminder

Registrado em includes/class-cpt.php:

register_post_type( 'boleto_reminder', array(
    'label'           => 'Boleto Reminder',
    'public'          => true,
    'hierarchical'    => false,
    'supports'        => false,
    'capability_type' => 'post',
    'capabilities'    => array(
        'create_posts' => false,
        'delete_posts' => false,
    ),
    'rewrite'         => false,
    'show_in_menu'    => 'woocommerce',
) );

Características:

  • Sem suporte a campos padrão (sem título visível, sem editor) — só metadados.
  • Não pode ser criado nem deletado pela UI — só o próprio plugin cria, e os registros ficam preservados (auditoria).
  • Aparece como submenu: WooCommerce → Boleto Reminder.

Status custom

Dois status registrados pelo plugin:

br_created — Lembrete criado

Status inicial. Representa um lembrete ativo, com pelo menos um cron pendente.

br_finished — Lembrete finalizado

Aplicado quando todos os crons rodaram ou quando o lembrete foi cancelado (mudança de status do pedido, expiração do boleto, cancelamento manual).

Meta keys do lembrete

Cada boleto_reminder tem 4 metas principais:

_order_id (int)

ID do pedido WooCommerce associado.

$order_id = get_post_meta( $reminder_id, '_order_id', true );
$order    = wc_get_order( $order_id );

_clicks (array)

Lista de cliques registrados nos links de pagamento. Cada entrada:

array(
    'time'      => '2025-02-22 10:45:30', // GMT
    'reference' => '24',                   // intervalo clicado (em horas)
)

Quando usar: contagem de cliques, análise por intervalo (cliques em 24h vs. 48h), tempo entre envio e primeira clique.

_timeline (array)

Lista cronológica de eventos. Cada entrada:

array(
    'time'    => '2025-02-22 10:15:30', // GMT
    'message' => 'Definindo crons para o pedido #123',
)

Mensagens típicas:

  • "Definindo crons para o pedido #<id>"
  • "Definido cron para <X> horas"
  • "Enviando e-mail de <X> horas para o pedido #<id>"
  • "Eventos cancelados. Motivo: <motivo>"

_available_hours (array)

Snapshot dos intervalos configurados no momento em que o lembrete foi criado. Garante que mudanças posteriores na configuração de Horários não confundam o histórico.

array( 24 => '24 Horas depois', 48 => '48 Horas depois' )

Metas no pedido

Além do post do lembrete, o plugin grava 2 metas no WC_Order:

Meta key Valor Descrição
_wc_boleto_reminder 'yes' Marca que o lembrete já foi criado pra esse pedido (evita duplicação)
_wc_boleto_reminder_id int ID do post boleto_reminder correspondente

Acesso rápido a partir do pedido:

$order       = wc_get_order( 123 );
$reminder_id = $order->get_meta( '_wc_boleto_reminder_id' );
$reminder    = wc_boleto_reminder_get_object( $reminder_id );

Iterar todos os lembretes

$query = new WP_Query( array(
    'post_type'      => 'boleto_reminder',
    'post_status'    => array( 'br_created', 'br_finished' ),
    'posts_per_page' => -1,
    'date_query'     => array(
        array( 'after' => '1 month ago' ),
    ),
) );

while ( $query->have_posts() ) {
    $query->the_post();
    $reminder = wc_boleto_reminder_get_object( get_the_ID() );

    if ( $reminder ) {
        echo "Pedido #{$reminder->order_id}: ";
        echo count( $reminder->clicks ) . " cliques\n";
    }
}

wp_reset_postdata();
Cuidado com queries SQL diretas

_clicks e _timeline são arrays serializados pelo WordPress. Pra dashboards externos, use wc_boleto_reminder_get_object() ou exponha via REST API custom — não tente filtrar via wp_postmeta direto.

Foi útil?