How to add your custom template?
Copy the default template files (including folder) you’ll find in plugins/woocommerce-pdf-invoices/includes/templates/invoice/simple to uploads/woocommerce-pdf-invoices/templates/invoice/simple . The plugin will automatically detect the template and makes it available for selection within the Template Settings. Now go ahead and start making some changes to the template files! 🙂
Important: Before you update the plugin, always have a look at the Changelog if their have been any changes to the template files. There will be updates that require updating your custom template!
How to add a fee to the invoice?
To add a fee to WooCommerce and your invoice, simply add the following action to your themes functions.php .
function add_woocommerce_fee() { global $woocommerce; if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $amount = 5; $woocommerce->cart->add_fee( 'FEE_NAME', $amount, true, 'standard' ); } add_action( 'woocommerce_cart_calculate_fees','add_woocommerce_fee' ); How to hide order item meta?
To hide order item meta from the invoice, simply add the following filter to your themes functions.php .
/** * Hide order itemmeta on Invoices for WooCommerce' invoice template. * * @param array $hidden_order_itemmeta itemmeta. * * @return array */ function bewpi_alter_hidden_order_itemmeta( $hidden_order_itemmeta ) { $hidden_order_itemmeta[] = '_wc_cog_item_cost'; $hidden_order_itemmeta[] = '_wc_cog_item_total_cost'; $hidden_order_itemmeta[] = '_subscription_interval'; $hidden_order_itemmeta[] = '_subscription_length'; // end so on.. return $hidden_order_itemmeta; } add_filter( 'bewpi_hidden_order_itemmeta', 'bewpi_alter_hidden_order_itemmeta', 10, 1 ); How to change the common PDF options?
To change the more common options of the PDF, use below example.
function custom_bewpi_mpdf_options( $options ) { $options['mode'] = ''; $options['format'] = ''; // use [format]-L or [format]-P to force orientation (A4-L will be size A4 with landscape orientation) $options['default_font_size'] = 0; $options['default_font'] = 'opensans'; $options['margin_left'] = 14; $options['margin_right'] = 14; $options['margin_top'] = 14; $options['margin_bottom'] = 0; $options['margin_header'] = 14; $options['margin_footer'] = 6; $options['orientation'] = 'P'; // Also try to force with format option return $options; } add_filter( 'bewpi_mpdf_options', 'custom_bewpi_mpdf_options' ); How to change the more advanced PDF options?
To fully customize the PDF, use below code. This filter gives you full control over the mPDF library. Check the mPDF manual for more info.
function bewpi_mpdf( $mpdf, $document ) { // change the direction of the invoice to RTL $mpdf->SetDirectionality( 'rtl' ); return $mpdf; } add_filter( 'bewpi_mpdf', 'bewpi_mpdf', 10, 2 ); How to display invoice download button on specific template files?
Add below code for example to your “thankyou” page or “customer-completed-order” email template.
echo do_shortcode( '[bewpi-download-invoice title="Download (PDF) Invoice {formatted_invoice_number}" order_id="' . $order->get_id() . '"]' );
For use in WordPress editor use below shortcode. This will only work if you replace “ORDER_ID” with an actual order id.
[bewpi-download-invoice title="Download (PDF) Invoice {formatted_invoice_number}" order_id="ORDER_ID"]
Note: Download button will only be displayed when PDF exists and order has been paid.
How to skip invoice generation based on specific payment methods?
Add the name of the payment method to the array.
function bewpi_attach_invoice_excluded_payment_methods( $payment_methods ) { return array( 'bacs', 'cod', 'cheque', 'paypal' ); } add_filter( 'bewpi_attach_invoice_excluded_payment_methods', 'bewpi_attach_invoice_excluded_payment_methods', 10, 2 ); How to skip invoice generation in general?
Add below function to your themes ‘functions.php’ file.
function bewpi_skip_invoice_generation( $skip, $status, $order ) { // Do your stuff based on the order. return true; // True to skip. } add_filter( 'bewpi_skip_invoice_generation', 'bewpi_skip_invoice_generation', 10, 3 ); How to allow specific roles to download invoice?
Add the name of the role to the array. By default shop managers and administrators are allowed to download invoices.
function bewpi_allowed_roles_to_download_invoice($allowed_roles) { // available roles: shop_manager, customer, contributor, author, editor, administrator $allowed_roles[] = "editor"; // end so on.. return $allowed_roles; } add_filter( 'bewpi_allowed_roles_to_download_invoice', 'bewpi_allowed_roles_to_download_invoice', 10, 2 ); How to alter formatted invoice number?
Add following filter function to your ‘functions.php’ within your theme.
function alter_formatted_invoice_number( $formatted_invoice_number, $document_type ) { if ( $document_type === 'invoice/global' ) { // 'simple' or 'global'. // add M for global invoices. return 'M' . $formatted_invoice_number; } return $formatted_invoice_number; } add_filter( 'bewpi_formatted_invoice_number', 'alter_formatted_invoice_number', 10, 2 ); How to add custom fields/meta-data to the PDF invoice template?
Use below code to display meta-data. Replace {META_KEY} with the actual key. If you use another plugin, just ask the key from the author of that plugin.
<?php echo BEWPI()->templater()->get_meta( '{META_KEY}' ); ?>
Important: A custom template is required to add a custom field to the PDF invoice.
How to use a different template based on some order variable?
Use below code to use a different template based on WPML order language. You can for example change the function to use a different template based on the payment method instead.
/** * Change template based on WPML order language. * Make sure to create custom templates with the correct names or the templates won't be found. * * @param string $template_name template name. * @param string $template_type template type like global or simple. * @param int $order_id WC Order ID. * * @return string */ function change_template_based_on_order_language( $template_name, $template_type, $order_id ) { $order_language = get_post_meta( $order_id, 'wpml_language', true ); if ( false === $order_language ) { return $template_name; } switch ( $order_language ) { case 'en': $template_name = 'minimal-en'; break; case 'nl': $template_name = 'minimal-nl'; break; } return $template_name; } add_filter( 'wpi_template_name', 'change_template_based_on_order_language', 10, 3 ); How to add invoice information meta?
Use below code to add invoice information meta to the PDF invoice template.
/** * Add PDF invoice information meta (from third party plugins). * * @param array $info Invoice info meta. * @param BEWPI_Invoice $invoice Invoice object. * @since 2.9.8 * * @return array. */ function add_invoice_information_meta( $info, $invoice ) { $payment_gateway = wc_get_payment_gateway_by_order( $invoice->order ); // Add PO Number from 'WooCommerce Purchase Order Gateway' plugin. if ( $payment_gateway && 'woocommerce_gateway_purchase_order' === $payment_gateway->get_method_title() ) { $po_number = WPI()->get_meta( $invoice->order, '_po_number' ); if ( $po_number ) { $info['po_number'] = array( 'title' => __( 'Purchase Order Number:', 'woocommerce-pdf-invoices' ), 'value' => $po_number, ); } } // Add VAT Number from 'WooCommerce EU VAT Number' plugin. $vat_number = WPI()->get_meta( $invoice->order, '_vat_number' ); if ( $vat_number ) { $info['vat_number'] = array( 'title' => __( 'VAT Number:', 'woocommerce-pdf-invoices' ), 'value' => $vat_number, ); } return $info; } add_filter( 'wpi_invoice_information_meta', 'add_invoice_information_meta', 10, 2 ); How to change the invoice date?
Use below filter to change the invoice date.
/** * Change invoice date to order date in order to regenerate old invoices and keep the date. * * @param string $invoice_date date of invoice. * @param BEWPI_Abstract_Invoice $invoice invoice object. * * @return string needs to be in mysql format. */ function change_invoice_date_to_order_date( $invoice_date, $invoice ) { // get_date_paid() or get_date_created(). $date_completed = $invoice->order->get_date_completed(); if ( null !== $date_completed ) { return $date_completed->date( 'Y-m-d H:i:s' ); } return $invoice_date; } add_filter( 'wpi_invoice_date', 'change_invoice_date_to_order_date', 10, 2 ); How to update the PDF invoice when it already has been sent to the customer?
Since version 2.9.4 the plugin removed the ability to update the PDF invoice when it already has been sent to the customer. If in what manner you still want to update the invoice, you can do so by resetting a custom field.
- 01Go to Edit Order page.
- 02Change custom field ‘bewpi_pdf_invoice_sent’ value within custom field widget to 0.
- 03Refresh page and Update button will appear.