1. #!trpst#trp-gettext data-...
  2. #!trpst#trp-gettext data-...
  3. Onderwerpen
  4. Codeknipsels

Codeknipsels

Dit is een voor ontwikkelaars document. Als u niet bekend bent met code / templates en het oplossen van mogelijke conflicten, neem dan contact op met een ontwikkelaar die bekend is met FooSales en / of WooCommerce. Deze snippets worden geleverd als een hoffelijkheid en zijn bedoeld als een startpunt om eventuele specifieke aanpassing behoeften te helpen. We zijn niet in staat om ondersteuning te bieden voor aanpassingen onder onze Servicevoorwaarden.

Vastleggen Square kosten bij het voltooien van een bestelling #

Als u gebruik maakt van een derde partij export plugin om uw bestellingen te exporteren en je bent het verwerken van betalingen met Square, wilt u misschien de kosten die Square aftrekt van de betaling in uw verkoop-export op te nemen. Dit helpdocument bevatte eerder een code snippet die Square verwerkingskosten vastgelegd als meta data bij het voltooien van de bestelling. Dit ondersteunde echter geen gesplitste betalingen en aangezien de structuur van plugin 1.40.0 + is volledig herzien, zal de code snippet niet meer functioneren. De functionaliteit in de code snippet is toegevoegd aan de kernfunctionaliteit van de plugin die ook gesplitste betalingen en verschillende orderverzendstatussen ondersteunt in plugin versie 1.40.2

Let op dat als u het codefragment eerder hebt toegevoegd aan uw functions.php-bestand, u moet het verwijderen om kritieke fouten te voorkomen bij het indienen van bestellingen via FooSales.

Je kunt meer lezen over hoe Square vergoedingen worden vastgelegd in onze Square Betalingsintegratie helpdocument.

De bestelnotitie van FooSales toevoegen aan de WooCommerce admin e-mails #

Voeg het volgende codefragment toe aan de functies.php bestand als je wilt dat de "Bestelnotitie" die je hebt toegevoegd aan de bestelling in FooSales wordt weergegeven in de WooCommerce admin e-mails.

add_action( "woocommerce_email_order_meta", "woo_add_order_notes_to_email", 10, 4 );

functie woo_add_order_notes_to_email($order, $sent_to_admin, $plain_text, $email) {

	if ( isset($post->ID) )
		$id = $post->ID;
	anders
		$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>' . __( 'Bestelnotities', 'woocommerce' ) . '</h2>';

		echo '<ul class="order_notes">';

		if ( $notes ) {
				?&gt;
				<li>
					<div class="note_content">
						content ) ) ); ?&gt;
					</div>
				</li>
				&lt;?php } else { echo &#039;<li>' . __( "Er zijn nog geen notities voor deze bestelling.", "woocommerce" ) . '</li>';
		}

		echo '</ul>';
	}
}

Bestelgegevens verzenden vanaf FooSales en e-mail voltooien vanaf website #

Voeg het volgende codefragment toe aan de functies.php bestand als je automatisch de Ordergegevens e-mail wilt verzenden wanneer een bestelling wordt geplaatst via FooSales, en de e-mail Voltooid wilt verzenden wanneer een bestelling wordt geplaatst via de front-end van je 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 #

Voeg het volgende codefragment toe aan de functies.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 #

Voeg het volgende codefragment toe aan de functies.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>';
    }
}

 

Artikelen