In most tutorials, people use plugins to enable partial or advance payment in WooCommerce. But what if you could do it without any plugin?

In this blog post, I’ll share how I manually created a system to accept 50% advance payment for any product in my WooCommerce store — using only built-in settings and a little bit of logic.
🎯 Goal:
Allow customers to pay only 50% of the product price upfront, and pay the remaining 50% later — manually or during delivery.
✅ My Manual Method (No Plugin Needed):
Here’s how I did it step-by-step:
1. Create Two Separate Products
I created two versions of the same product:
- Product A: Main product with full price (for reference)
- Product B: Same product, but priced at 50% of the actual amount (for advance payment)
💡 Example: If the original price is $100, I created another product priced at $50 with a note that it’s an advance payment only.
2. Customize the Product Title and Description
For the 50% advance product, I renamed the title like:
“Product Name – 50% Advance Payment”
And in the description, I clearly mentioned:
“This payment is for 50% advance. The remaining amount will be collected before or during delivery.”
This helps customers understand the process clearly.
3. Enable Cash on Delivery or Manual Payment for Final Payment
I kept the final 50% payment as:
- Cash on Delivery
- or via manual bank transfer (with instructions sent via email or shown on Thank You page)
You can add detailed instructions on the Thank You page, Order notes, or via email templates.
4. Disable Shipping for Advance Product (Optional)
Since this is not the final delivery, I disabled shipping for the advance payment product by:
- Marking it as a virtual product
- Or setting Free shipping just for that product
📝 Things to Note:
- Make sure the customer understands they are not paying full — mention it clearly.
- Follow up with a second invoice or payment link for the remaining amount.
- You can use order notes or email templates to handle communication smoothly.
🚀 Why I Chose This Method
- No plugin required – keeps the site lightweight
- Full control over pricing and order flow
- Ideal for freelancers, service-based stores, custom product sellers
// Order total কে 50% করা
add_filter( 'woocommerce_calculated_total', 'custom_partial_payment_total', 10, 2 );
function custom_partial_payment_total( $total, $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return $total;
// 50% Payment
return $total * 0.5;
}
// পূর্ণ মূল্য meta data হিসেবে save
add_action( 'woocommerce_checkout_create_order', 'save_full_order_total_meta', 20, 2 );
function save_full_order_total_meta( $order, $data ) {
$full_total = WC()->cart->get_subtotal() + WC()->cart->get_shipping_total();
$order->update_meta_data( '_full_order_total', $full_total );
}
add_action( 'woocommerce_review_order_before_payment', 'show_partial_payment_notice_on_checkout' );
function show_partial_payment_notice_on_checkout() {
$cart_total = WC()->cart->get_subtotal() + WC()->cart->get_shipping_total();
$advance = $cart_total * 0.5;
$due = $cart_total - $advance;
echo "<div style='border: 2px dashed #ff9900; padding: 15px; margin-bottom: 20px; background: #fff9e6;'>
<strong>🔔 আপনার অর্ডারের বিস্তারিত:</strong><br>
মোট অর্ডার মূল্য: " . wc_price($cart_total) . "<br>
আপনি এখন পরিশোধ করবেন (৫০%): " . wc_price($advance) . "<br>
বাকি থাকবে (ডেলিভারির সময় পরিশোধযোগ্য): " . wc_price($due) . "
</div>";
}
