• Resolved webthings99

    (@webthings99)


    Olá, Quando o pagamento é recebido o status da encomenda no Woocommerce altera automaticamente para “Em processamento”, até aqui tudo normal.

    No entanto, eu gostaria de saber se é possível mudar o estado da encomenda para um estado personalizado depois de receber o pagamento? 

    Ou seja, eu já criei esse estado personalizado, dando-lhe o nome de “Em análise”, e a minha quest?o é como posso mudar automaticamente para esse estado depois de receber o pagamento, invés do procedimento normal que é mudar para o estado “Em processamento”. 

    é possivel fazer isto? Se sim, como??

Viewing 4 replies - 1 through 4 (of 4 total)
  • Olá @webthings99

    Os métodos de pagamento n?o alteram o estado da encomenda. O que fazem é “dizer ao WooCommerce” que a encomenda está paga, chamando $order->payment_complete() e depois o WooCommerce é que decide o estado em que coloca a encomenda.

    Por omiss?o para “Em processamento” ou, se a encomenda apenas tiver produtos virtuais e de download, para “Concluída”.

    Assim, a mudan?a de estado n?o tem que ver com o nosso plugin mas sim com o WooCommerce. Pode ser usado o filtro do WooCommerce woocommerce_payment_complete_order_status mas esse desenvolvimento à medida está fora do ambito do suporte gratuito do plugin.

    Thread Starter webthings99

    (@webthings99)

    Obrigado pela resposta rápida e pelo esclarecimento.

    Após uma pesquisa mais aprofundada encontrei este filtro que também faz aquilo que necessitava, no entanto envia na mesma o email de “Em processamento”, algo que ainda estou a tentar solucionar.

    Deixo aqui o filtro para o caso de ser útil a alguém no futuro.

    /**
     * Alterar estado da encomenda para 'Em análise' após Pagamento
     */
    add_action('woocommerce_payment_complete', 'custom_order_status_after_payment');
    
    function custom_order_status_after_payment($order_id)
    {
        // Obtém o objeto da encomenda
        $order = wc_get_order($order_id);
    
        // Verifica se a encomenda já n?o está no estado 'Em análise'
        if ($order->get_status() !== 'em-analise') {
            // Atualiza o status para 'Em análise'
            $order->update_status('em-analise');
        }
    }

    Nesse caso o que está a fazer é a usar um filtro que corre no final do payment complete, ou seja, quando o WooCommerce já fez a parte dele e passou a encomenda para “Em processamento”. O filtro que eu mencionei substitui o estado que o WooCommerce vai usar. No entanto, talvez n?o seja má ideia fazer como fez, porque outros plugins podem ter acc??es associadas ao estado “Em processamento” que nunca v?o correr se passar a encomenda logo para o vosso estado personalizado.

    Pode sempre ir a WooCommerce > Configura??es > Emails e inactivar o email de encomenda em processamento.

    Thread Starter webthings99

    (@webthings99)

    Mais uma vez agrade?o-lhe pela resposta, ainda para mais n?o sendo algo diretamente relacionado com plugin.

    Em rela??o à inativa??o do email nas configura??es do Woocommerce, considerei n?o ser a solu??o ideal para o meu caso, porque o que eu pretendo realmente é ter um estado intermédio entre o estado “Aguarda a confirma??o de pagamento” e o estado “Em processamento”, ou seja continuarei a precisar do estado de “Em processamento” depois da encomeda passar pelo estado “Em análise”, e como tal precisarei também do email associado.

    Contudo, para resolver este problema acabei por utilizar o filtro que tinha sugerido na sua primeira resposta, com esse filtro já n?o envia o mail de “Em processamento” quando o estado é “Em análise”. No entanto depois deparei-me com outro problema que era que ao mudar o estado manualmente de “Em análise” para “Em processamento” o woocommerce n?o enviava o email de “Em processamento” e acabei por adicionar outro Hook para resolver este problema. Deixo aqui a solu??o para possiveis interessados:

    // Adiciona um filtro para modificar o status do pedido após o pagamento
    add_filter('woocommerce_payment_complete_order_status', 'custom_order_status_after_payment', 10, 2);
    
    // Fun??o para modificar o status do pedido após o pagamento
    function custom_order_status_after_payment($order_status, $order_id)
    {
        // Obtém o objeto da encomenda
        $order = wc_get_order($order_id);
    
        // Verifica se a encomenda n?o está no estado 'Em análise'
        if ($order->get_status() !== 'em-analise') {
            // Retorna o status 'Em análise'
            return 'em-analise';
        }
    
        // Se já estiver no status em 'Em análise', mantém o status atual
        return $order_status;
    }
    
    // Adiciona um Hook para detetar quando o status do pedido é alterado manualmente
    add_action('woocommerce_order_status_changed', 'send_processing_email_on_manual_update', 10, 4);
    
    // Fun??o para enviar e-mail quando o status do pedido é manualmente alterado para 'Em processamento'
    function send_processing_email_on_manual_update($order_id, $old_status, $new_status, $order)
    {
        // Verifica se o status está a mudar para 'Em processamento' e se é uma atualiza??o manual
        if ($new_status === 'processing' && !empty($_POST['_wpnonce'])) {
            // Envia o e-mail de 'Em processamento'
            WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger($order_id);
        }
    }
    
Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Alterar estado da encomenda para estado “personalizado” após pagamento’ is closed to new replies.