Θέματα

⌘K
  1. #!trpst#trp-gettext data-...
  2. #!trpst#trp-gettext data-...
  3. Θέματα
  4. Αποσπάσματα κώδικα

Αποσπάσματα κώδικα

Αυτό είναι ένα Επίπεδο προγραμματιστή έγγραφο. Εάν δεν είστε εξοικειωμένοι με τον κώδικα/προτύπων και την επίλυση πιθανών συγκρούσεων, παρακαλούμε απευθυνθείτε σε έναν προγραμματιστή που είναι εξοικειωμένος με το FooSales ή/και το WooCommerce. Αυτά τα αποσπάσματα παρέχονται από ευγένεια και προορίζονται ως σημείο εκκίνησης για να βοηθήσουν σε τυχόν ειδικές ανάγκες προσαρμογής. Δεν είμαστε σε θέση να παρέχουμε υποστήριξη για προσαρμογές στο πλαίσιο των Όροι χρήσης.

Καταγραφή τελών Square κατά την ολοκλήρωση μιας παραγγελίας #

Εάν χρησιμοποιείτε ένα πρόσθετο εξαγωγής τρίτου μέρους για να εξάγετε τις παραγγελίες σας και επεξεργάζεστε τις πληρωμές με το Square, ίσως να θέλετε να συμπεριλάβετε τα τέλη που αφαιρεί το Square από την πληρωμή στην εξαγωγή των πωλήσεών σας. Αυτό το έγγραφο βοήθειας περιείχε προηγουμένως ένα απόσπασμα κώδικα που αποτύπωνε τις αμοιβές επεξεργασίας Square ως μεταδεδομένα κατά την ολοκλήρωση της παραγγελίας. Αυτό, ωστόσο, δεν υποστήριζε διαιρεμένες πληρωμές και δεδομένου ότι η δομή του πρόσθετου 1.40.0+ έχει αναθεωρηθεί πλήρως, το απόσπασμα κώδικα δεν θα λειτουργεί πλέον. Η λειτουργικότητα που περιέχεται στο απόσπασμα κώδικα έχει προστεθεί στη βασική λειτουργικότητα του πρόσθετου, η οποία υποστηρίζει επίσης πληρωμές με διαχωρισμό και διάφορες καταστάσεις υποβολής παραγγελίας στην έκδοση 1.40.2 του πρόσθετου

Παρακαλώ σημειώστε ότι αν προηγουμένως προσθέσατε το απόσπασμα κώδικα στο αρχείο functions.php, θα πρέπει να το αφαιρέσετε για την αποφυγή κρίσιμων σφαλμάτων κατά την υποβολή παραγγελιών μέσω του FooSales.

Μπορείτε να διαβάσετε περισσότερα σχετικά με τον τρόπο καταγραφής των τελών Square στο Έγγραφο βοήθειας για την ενσωμάτωση πληρωμών Square.

Προσθέστε το σημείωμα παραγγελίας από το FooSales στα email του διαχειριστή του WooCommerce. #

Προσθέστε το ακόλουθο κομμάτι κώδικα στο θέμα σας functions.php αν θέλετε η "Σημείωση παραγγελίας" που προσθέσατε στην παραγγελία στο FooSales να εμφανίζεται στα emails του διαχειριστή του 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>' . __( 'Σημειώσεις παραγγελίας', '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>' . __( 'Δεν υπάρχουν ακόμα σημειώσεις για αυτή την παραγγελία.', 'woocommerce' ) . '</li>';
		}

		echo '</ul>';
	}
}

Αποστολή στοιχείων παραγγελίας από το FooSales και ολοκληρωμένο email από την ιστοσελίδα #

Προσθέστε το ακόλουθο κομμάτι κώδικα στο θέμα σας functions.php αρχείο αν θέλετε να στέλνετε αυτόματα το μήνυμα ηλεκτρονικού ταχυδρομείου Λεπτομέρειες παραγγελίας όταν μια παραγγελία τοποθετείται μέσω του FooSales και να στέλνετε το μήνυμα ηλεκτρονικού ταχυδρομείου Ολοκληρώθηκε όταν μια παραγγελία τοποθετείται μέσω του front-end του ιστότοπού σας.

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 #

Προσθέστε το ακόλουθο κομμάτι κώδικα στο θέμα σας 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 #

Προσθέστε το ακόλουθο κομμάτι κώδικα στο θέμα σας 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>';
    }
}

 

Άρθρα