Este é um Nível de programador documento. Se não estiver familiarizado com o código/modelos e com a resolução de potenciais conflitos, contacte um programador que esteja familiarizado com o FooSales e/ou WooCommerce. Esses trechos são fornecidos como cortesia e servem como ponto de partida para ajudar em qualquer necessidade específica de personalização. Não podemos fornecer suporte para personalizações em nosso Termos do serviço.
Capturar as taxas do Square ao concluir uma encomenda #
Se estiver a utilizar um plugin de exportação de terceiros para exportar as suas encomendas e estiver a processar pagamentos com o Square, poderá querer incluir as taxas que o Square deduz do pagamento na sua exportação de vendas. Este documento de ajuda continha anteriormente um trecho de código que capturava as taxas de processamento do Square como metadados na conclusão do pedido. No entanto, isso não suportava pagamentos divididos e, como a estrutura do plugin 1.40.0+ foi completamente reformulada, o trecho de código não funcionará mais. A funcionalidade contida no fragmento de código foi adicionada à funcionalidade principal do plug-in, que também suporta pagamentos fraccionados e vários estados de envio de encomendas na versão 1.40.2 do plug-in
Atenção que, se tiver adicionado anteriormente o fragmento de código ao seu ficheiro functions.php, poderá deve ser removido para evitar erros críticos na apresentação de encomendas através do FooSales.
Pode ler mais sobre a forma como as taxas Square são capturadas na nossa Documento de ajuda da integração de pagamentos Square.
Adicionar a nota de encomenda do FooSales às mensagens de correio eletrónico do administrador do WooCommerce #
Adicione o seguinte trecho de código ao functions.php se pretende que a "Nota de encomenda" que adicionou à encomenda no FooSales seja apresentada nos emails de administração do WooCommerce.
add_action( 'woocommerce_email_order_meta', 'woo_add_order_notes_to_email', 10, 4 );
function woo_add_order_notes_to_email($order, $sent_to_admin, $plain_text, $email) {
se ( isset($post->ID) )
$id = $post->ID;
senão
$id = $order->ID;
if ($sent_to_admin && 'foosales_app' === get_post_meta($id, '_foosales_order_source', true)) {
$args = array(
'order_id' => $id,
'type' => ''
);
$notes = wc_get_order_notes( $args );
echo '<h2>' . __( 'Notas de encomenda', 'woocommerce' ) . '</h2>';
ecoar '<ul class="order_notes">';
se ( $notes ) {
?>
<li>
<div class="note_content">
content ) ) ); ?>
</div>
</li>
<?php } else { echo '<li>' . __( 'Ainda não existem notas para esta encomenda.', 'woocommerce' ) . '</li>';
}
echo '</ul>';
}
}
Enviar os dados da encomenda a partir do FooSales e o e-mail de conclusão a partir do sítio Web #
Adicione o seguinte trecho de código ao functions.php Se pretender enviar automaticamente o e-mail de Detalhes da Encomenda quando uma encomenda é efectuada através do FooSales, e enviar o e-mail de Concluído quando uma encomenda é efectuada através do front-end do seu website.
add_filter( 'woocommerce_email_enabled_customer_completed_order', 'is_foosales', 9999, 2 );
function is_foosales($enabled, $order ) {
if ( ! empty( $order ) && 'foosales_app' === $order->get_meta( '_foosales_order_source', true ) ) {
return false;
}
return $enabled;
}
add_action( 'woocommerce_order_status_completed', 'send_invoice_on_completed' );
function send_invoice_on_completed( $order_id ) {
$wc_order = wc_get_order($order_id);
if ( ! empty( $wc_order ) && 'foosales_app' === $wc_order->get_meta( '_foosales_order_source', true ) ) {
$emails = WC()->mailer()->get_emails();
$emails['WC_Email_Customer_Invoice']->trigger( $order_id );
}
}
Implement partial use for coupon codes #
Adicione o seguinte trecho de código ao functions.php file if you want to enable the partial use of coupon codes. This means that if the coupon code amount is more than the total price of the items being purchased, then the amount owed would be 0 and the total price will be deducted from the coupon code amount so that there is credit left to be used in the future.
// 1. Process coupon adjustments on active order completion/processing
add_action( 'woocommerce_order_status_processing', 'adjust_partially_used_coupon_amount', 10, 1 );
add_action( 'woocommerce_order_status_completed', 'adjust_partially_used_coupon_amount', 10, 1 );
function adjust_partially_used_coupon_amount( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
// Prevent code from running multiple times on the same order
if ( $order->get_meta( '_coupon_amount_adjusted' ) ) {
return;
}
$coupons = $order->get_coupons();
foreach ( $coupons as $item ) {
$code = $item->get_code();
$coupon = new WC_Coupon( $code );
// Only target fixed cart discount coupons
if ( $coupon->get_id() && $coupon->is_type( 'fixed_cart' ) ) {
$coupon_original_amount = (float) $coupon->get_amount();
$discount_used = (float) $item->get_discount();
if ( $coupon_original_amount > $discount_used ) {
// PARTIAL USE: Reduce balance and restore 1 usage count so it stays active
$remaining_balance = $coupon_original_amount - $discount_used;
$coupon->set_amount( $remaining_balance );
$usage_count = $coupon->get_usage_count();
if ( $usage_count > 0 ) {
$coupon->set_usage_count( $usage_count - 1 );
}
$coupon->save();
} elseif ( $coupon_original_amount > 0 && abs( $coupon_original_amount - $discount_used ) < 0.001 ) {
// FINAL USE: Full remaining balance spent. Set balance to 0.
// Leave usage_count alone so WooCommerce natural limits apply.
$coupon->set_amount( 0 );
$coupon->save();
}
}
}
// Mark order as processed so status changes don't re-trigger this logic
$order->update_meta_data( '_coupon_amount_adjusted', 'yes' );
$order->save();
}
// 2. Restore coupon balance if order is cancelled, refunded, or failed
add_action( 'woocommerce_order_status_cancelled', 'restore_partially_used_coupon_amount', 10, 1 );
add_action( 'woocommerce_order_status_refunded', 'restore_partially_used_coupon_amount', 10, 1 );
add_action( 'woocommerce_order_status_failed', 'restore_partially_used_coupon_amount', 10, 1 );
function restore_partially_used_coupon_amount( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
// Only attempt restoration if the coupon was previously deducted on this order
if ( ! $order->get_meta( '_coupon_amount_adjusted' ) ) {
return;
}
// Prevent double-restoration if status changes between cancelled/refunded
if ( $order->get_meta( '_coupon_amount_restored' ) ) {
return;
}
$coupons = $order->get_coupons();
foreach ( $coupons as $item ) {
$code = $item->get_code();
$coupon = new WC_Coupon( $code );
if ( $coupon->get_id() && $coupon->is_type( 'fixed_cart' ) ) {
$current_balance = (float) $coupon->get_amount();
$discount_applied = (float) $item->get_discount();
if ( $discount_applied > 0 ) {
$restored_balance = $current_balance + $discount_applied;
$coupon->set_amount( $restored_balance );
// If coupon was completely depleted (0) and is now restored, reduce usage count so it reactivates
if ( $current_balance == 0 && $restored_balance > 0 ) {
$usage_count = $coupon->get_usage_count();
if ( $usage_count > 0 ) {
$coupon->set_usage_count( $usage_count - 1 );
}
}
$coupon->save();
}
}
}
// Mark order meta as restored
$order->update_meta_data( '_coupon_amount_restored', 'yes' );
$order->save();
}
