Il s'agit d'un Au niveau du développeur document. Si vous n'êtes pas familiarisé avec le code/les modèles et la résolution de conflits potentiels, veuillez vous adresser à un développeur qui connaît FooSales et/ou WooCommerce. Ces extraits sont fournis à titre gracieux et sont destinés à servir de point de départ pour répondre à des besoins de personnalisation spécifiques. Nous ne sommes pas en mesure de fournir une assistance pour les personnalisations effectuées dans le cadre de notre programme Conditions d'utilisation.
Capturer les frais de Square lors de la finalisation d'une commande #
Si vous utilisez un plugin d'exportation tiers pour exporter vos commandes et que vous traitez les paiements avec Square, vous souhaiterez peut-être inclure les frais que Square déduit du paiement dans votre exportation de ventes. Ce document d'aide contenait auparavant un extrait de code qui capturait les frais de traitement de Square en tant que métadonnées à la fin de la commande. Cependant, ce code ne prenait pas en charge les paiements fractionnés et, étant donné que la structure du plugin 1.40.0+ a été entièrement remaniée, l'extrait de code ne fonctionnera plus. La fonctionnalité contenue dans l'extrait de code a été ajoutée à la fonctionnalité principale du plugin qui prend également en charge les paiements fractionnés et les différents statuts de soumission de commande dans la version 1.40.2 du plugin.
A noter que si vous avez précédemment ajouté l'extrait de code à votre fichier functions.php, vous avez doit l'enlever afin d'éviter les erreurs critiques lors de la soumission des commandes par l'intermédiaire de FooSales.
Pour en savoir plus sur la manière dont les redevances de Square sont perçues, consultez notre site web Document d'aide sur l'intégration des paiements Square.
Ajouter la note de commande de FooSales aux courriels d'administration de WooCommerce #
Ajoutez l'extrait de code suivant à la section functions.php si vous souhaitez que la "note de commande" que vous avez ajoutée à la commande dans FooSales s'affiche dans les courriels d'administration de 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) {
if ( isset($post->ID) )
$id = $post->ID ;
else
$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>' . __('Order Notes', 'woocommerce' ) . '</h2>' ;
echo '<ul class="order_notes">' ;
if ( $notes ) {
?>
<li>
<div class="note_content">
content ) ) ); ?>
</div>
</li>
<?php } else { echo '<li>' . __( 'Il n'y a pas encore de notes pour cette commande.', 'woocommerce' ) . '</li>' ;
}
echo '</ul>';
}
}
Envoyer les détails de la commande à partir de FooSales, et l'e-mail complété à partir du site web #
Ajoutez l'extrait de code suivant à la section functions.php si vous souhaitez envoyer automatiquement l'e-mail relatif aux détails de la commande lorsqu'une commande est passée par l'intermédiaire de FooSales, et envoyer l'e-mail relatif à l'achèvement de la commande lorsqu'une commande est passée par l'intermédiaire de votre site web.
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 #
Ajoutez l'extrait de code suivant à la section 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();
}
Hide WooCommerce Point of Sale Settings #
Ajoutez l'extrait de code suivant à la section functions.php file if you want to hide the Point of Sale settings added by WooCommerce as of version 11.
// Remove the built-in WooCommerce Point of Sale settings tab.
add_filter( 'woocommerce_settings_tabs_array', 'remove_wc_pos_settings_tab', 999, 1 );
function remove_wc_pos_settings_tab( $tabs ) {
if ( isset( $tabs['point-of-sale'] ) ) {
unset( $tabs['point-of-sale'] );
}
return $tabs;
}
// Remove the All Sales Channels filter on the Orders page.
add_action( 'admin_head', 'hide_sales_channel_order_filter' );
function hide_sales_channel_order_filter() {
$screen = get_current_screen();
// Target the WooCommerce orders listing screen
if ( isset( $screen->id ) && ( $screen->id === 'woocommerce_page_wc-orders' || $screen->id === 'edit-shop_order' ) ) {
echo '<style>
select[name="_created_via"],
#sales_channel {
display: none !important;
}
</style>';
}
}
