79634177

Date: 2025-05-22 16:37:20
Score: 3
Natty:
Report link

I managed to do this through this code

<?php
// 1) Validação: bloqueia o envio se o saldo for insuficiente
add_action( 'elementor_pro/forms/validation', function( $record, $ajax_handler ) {
    // Nome do formulário (Avançado > Nome do formulário)
    if ( 'artigo_saldo' !== $record->get_form_settings( 'form_name' ) ) {
        return;
    }

    // Captura o valor selecionado no form
    $fields = $record->get( 'fields' );
    $valor  = floatval( $fields['saldo_artigo']['value'] );

    // Usuário logado
    $user_id = get_current_user_id();
    if ( ! $user_id ) {
        $ajax_handler->add_error( 'saldo_artigo', 'Você precisa estar logado para usar seu saldo.' );
        return;
    }

    // Recupera o saldo bruto direto do meta do usuário
    $raw_balance = get_user_meta( $user_id, '_current_woo_wallet_balance', true );
    $balance     = floatval( $raw_balance );

    // Se o saldo for menor que o valor do form, dispara erro no campo
    if ( $balance < $valor ) {
        $ajax_handler->add_error(
            'saldo_artigo',
            sprintf(
                'Saldo insuficiente. Seu saldo atual é R$ %s.',
                number_format( $balance, 2, ',', '.' )
            )
        );
    }
}, 10, 2 );

// 2) Débito: só é executado se passar pela validação acima
add_action( 'elementor_pro/forms/new_record', function( $record, $handler ) {
    // Mesma checagem do nome do formulário
    if ( 'artigo_saldo' !== $record->get_form_settings( 'form_name' ) ) {
        return;
    }

    $fields  = $record->get( 'fields' );
    $valor   = floatval( $fields['saldo_artigo']['value'] );
    $user_id = get_current_user_id();

    if ( $user_id && $valor > 0 ) {
        $descricao = 'Débito automático após envio do formulário de artigo';
        woo_wallet()->wallet->debit( $user_id, $valor, $descricao );
    }
}, 10, 2 );
Reasons:
  • Blacklisted phrase (3): Você
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Mateus Tavares Ruiz