Default placeholders from PDF Invoices template
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADER : | |
[[PDFFONTFAMILY]] : Quickly modify the font used on the PDF | |
[[PDFPAIDINFULLOVERLAY]] : Modify CSS for the "PAID IN FULL" overlay | |
[[PDFCURRENCYSYMBOLFONT]] : Modify the CSS for currency symbols | |
[[PDFINVOICEADDITIONALCSS]] : Add your own CSS to customise the PDF using a function | |
[[PDFLOGO]] : Logo file from settings (uses "Company Name" if no logo is available) | |
[[PDFCOMPANYNAME]] : Company name from "Company Name" setting | |
[[PDFCOMPANYDETAILS]] : Company address from "Company Information" setting | |
[[PDFINVOICENUMHEADING]] : Heading for Invoice Number | |
[[PDFINVOICENUM]] : Invoice Number from WooCommerce order | |
[[PDFORDERENUMHEADING]] : Order Number heading | |
[[PDFORDERENUM]] : Order Number from WooCommerce order | |
[[PDFINVOICEDATEHEADING]] : Invoice date heading | |
[[PDFINVOICEDATE]] : Invoice date from WooCommerce order | |
[[PDFORDERDATEHEADING]] : Order date heading | |
[[PDFORDERDATE]] : Order date from WooCommerce order | |
[[PDFINVOICE_PAYMETHOD_HEADING]] : Payment method heading | |
[[PDFINVOICEPAYMENTMETHOD]] : Payment method from WooCommerce order | |
[[PDFINVOICE_SHIPMETHOD_HEADING]] : Shipping method heading | |
[[PDFSHIPPINGMETHOD]] : Shipping method from WooCommerce order | |
[[PDFSHIPMENTTRACKING]] : Shippment tracking heading and details if availabe from WooCommerce order | |
[[PDFINVOICE_BILLINGDETAILS_HEADING]] : Billing details heading | |
[[PDFBILLINGADDRESS]] : Billing address from WooCommerce order | |
[[PDFBILLINGTEL]] : Billing telephone number from WooCommerce order | |
[[PDFBILLINGEMAIL]] : Billing email address from WooCommerce order | |
[[PDFBILLINGVATNUMBER]] : Billing VAT number if available from WooCommerce order | |
[[PDFINVOICE_SHIPPINGDETAILS_HEADING]] : Shippng address heading | |
[[PDFSHIPPINGADDRESS]] : Shipping address from WooCommerce order | |
FOOTER : | |
[[PDFREGISTEREDNAME_SECTION]] : Registered business name from "Registered Name" setting | |
[[PDFREGISTEREDADDRESS_SECTION]] : Registered business address from "Registered address" setting | |
[[PDFCOMPANYNUMBER_SECTION]] : Company number from "Company number" setting | |
[[PDFTAXNUMBER_SECTION]] : Tax or VAT number from "Tax number" setting | |
MAIN SECTION : | |
[[ORDERINFOHEADER]] : Heading for order details section | |
[[ORDERINFO]] : Table of products from WooCommerce order | |
[[PDFBARCODES]] : Barcode if available from WooCommerce order | |
[[PDFORDERNOTES]] : Order notes from WooCommerce order | |
[[PDFORDERTOTALS]] : Order totals section from WooCommerce order |
Template filters
↑ Back to topapply_filters( 'pdf_template_invoice_number_text', __( 'Invoice No. :', PDFLANGUAGE ) ) apply_filters( 'pdf_template_order_number_text', __( 'Order No. :', PDFLANGUAGE ) ) apply_filters( 'pdf_template_invoice_date_text', __( 'Invoice Date :', PDFLANGUAGE ) ) apply_filters( 'pdf_template_order_date_text', __( 'Order Date :', PDFLANGUAGE ) ) apply_filters( 'pdf_template_billing_details_text', __( '<h3>Billing Details</h3>', PDFLANGUAGE ) ) apply_filters( 'pdf_template_shipping_details_text', __( '<h3>Shipping Details</h3>', PDFLANGUAGE ) ) apply_filters( 'pdf_template_registered_name_text', __( 'Registered Name : ', PDFLANGUAGE ) ) apply_filters( 'pdf_template_registered_office_text', __( 'Registered Office : ', PDFLANGUAGE ) ) apply_filters( 'pdf_template_company_number_text', __( 'Company Number : ', PDFLANGUAGE ) ) apply_filters( 'pdf_template_vat_number_text', __( 'VAT Number : ', PDFLANGUAGE ) )Example : If you wanted to change ‘Vat Number : ‘ to ‘BTW No. : ‘ you would add the following to your theme functions.php file
add_filter( 'pdf_template_vat_number_text', 'custom_pdf_template_vat_number_text' ); function custom_pdf_template_vat_number_text() { return 'BTW No. : '; }
Change ‘My Orders’ button label
↑ Back to top/** * Change the button label for the PDF Button on the My Orders page * This will change the default label (PDF Invoice) to New PDF Label */ add_filter ( 'woocommerce_pdf_my_account_button_label' , 'custom_pdf_my_account_button_label' ); function custom_pdf_my_account_button_label() { return 'New PDF Label'; }Other available actions and filters to make minor changes :
Add additional column to the PDF order items
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Add SKU to PDF order heading | |
*/ | |
add_filter ( 'pdf_template_table_headings' , 'custom_pdf_table_headers' ); | |
function custom_pdf_table_headers() { | |
$headers = '<table class="shop_table orderdetails" width="100%">' . | |
'<thead>' . | |
'<tr><th colspan="7" align="left"><h2>' . esc_html__('Order Details', PDFLANGUAGE) . '</h2></th></tr>' . | |
'<tr>' . | |
'<th width="5%" valign="top" align="right">' . __( 'Qty', PDFLANGUAGE ) . '</th>' . | |
'<th width="10%" valign="top" align="left">' . __( 'SKU', PDFLANGUAGE ) . '</th>' . | |
'<th width="40%" valign="top" align="left">' . __( 'Product', PDFLANGUAGE ) . '</th>' . | |
'<th width="9%" valign="top" align="right">' . __( 'Price Ex', PDFLANGUAGE ) . '</th>' . | |
'<th width="9%" valign="top" align="right">' . __( 'Total Ex.', PDFLANGUAGE ) . '</th>' . | |
'<th width="7%" valign="top" align="right">' . __( 'Tax', PDFLANGUAGE ) . '</th>' . | |
'<th width="10%" valign="top" align="right">' . __( 'Price Inc', PDFLANGUAGE ) . '</th>' . | |
'<th width="10%" valign="top" align="right">' . __( 'Total Inc', PDFLANGUAGE ) . '</th>' . | |
'</tr>' . | |
'</thead>' . | |
'</table>'; | |
return $headers; | |
} | |
/** | |
* Add SKU to order line | |
*/ | |
add_filter ( 'pdf_template_line_output' , 'custom_pdf_lines', 10, 2 ); | |
function custom_pdf_lines ( $line, $order_id ) { | |
global $woocommerce; | |
$order = new WC_Order( $order_id ); | |
// Check WC version – changes for WC 3.0.0 | |
$pre_wc_30 = version_compare( WC_VERSION, '3.0', '<' ); | |
$order_currency = $pre_wc_30 ? $order->get_order_currency() : $order->get_currency(); | |
$pdflines = '<table width="100%">'; | |
$pdflines .= '<tbody>'; | |
if ( sizeof( $order->get_items() ) > 0 ) { | |
foreach ( $order->get_items() as $item ) { | |
if ( $item['qty'] ) { | |
$line = ''; | |
// $item_loop++; | |
$_product = $order->get_product_from_item( $item ); | |
$item_name = $item['name']; | |
$item_id = $pre_wc_30 ? $item['variation_id'] : $item->get_id(); | |
$meta_display = ''; | |
if ( version_compare( WC_VERSION, '3.0', '<' ) ) { | |
$item_meta = new WC_Order_Item_Meta( $item ); | |
$meta_display = $item_meta->display( true, true ); | |
$meta_display = $meta_display ? ( ' ( ' . $meta_display . ' )' ) : ''; | |
} else { | |
foreach ( $item->get_formatted_meta_data() as $meta_key => $meta ) { | |
$meta_display .= '<br /><small>(' . $meta->display_key . ':' . wp_kses_post( strip_tags( $meta->display_value ) ) . ')</small>'; | |
} | |
} | |
if ( $meta_display ) { | |
$meta_output = apply_filters( 'pdf_invoice_meta_output', $meta_display ); | |
$item_name .= $meta_output; | |
} | |
$line = '<tr>' . | |
'<td valign="top" width="5%" align="right">' . $item['qty'] . ' x</td>' . | |
'<td valign="top" width="10%">' . $_product->get_sku() . '</td>' . | |
'<td valign="top" width="40%">' . stripslashes( $item_name ) . '</td>' . | |
'<td valign="top" width="9%" align="right">' . wc_price( $item['line_subtotal'] / $item['qty'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'<td valign="top" width="9%" align="right">' . wc_price( $item['line_subtotal'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'<td valign="top" width="7%" align="right">' . wc_price( $item['line_subtotal_tax'] / $item['qty'], array( 'currency' => $order_currency ) ). '</td>' . | |
'<td valign="top" width="10%" align="right">' . wc_price( ( $item['line_subtotal'] + $item['line_subtotal_tax'] ) / $item['qty'], array( 'currency' => $order_currency ) ). '</td>' . | |
'<td valign="top" width="10%" align="right">' . wc_price( $item['line_subtotal'] + $item['line_subtotal_tax'], array( 'currency' => $order_currency ) ). '</td>' . | |
'</tr>'; | |
$pdflines .= $line; | |
} | |
} | |
} | |
$pdflines .= '</tbody>'; | |
$pdflines .= '</table>'; | |
return $pdflines; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Change Tax to Tax Rate | |
*/ | |
add_filter ( 'pdf_template_table_headings' , 'custom_pdf_table_headers' ); | |
function custom_pdf_table_headers() { | |
$headers = '<table class="shop_table orderdetails" width="100%">' . | |
'<thead>' . | |
'<tr><th colspan="7" align="left"><h2>' . esc_html__('Order Details', PDFLANGUAGE) . '</h2></th></tr>' . | |
'<tr>' . | |
'<th width="5%" valign="top" align="right">' . __( 'Qty', PDFLANGUAGE ) . '</th>' . | |
'<th width="50%" valign="top" align="left">' . __( 'Product', PDFLANGUAGE ) . '</th>' . | |
'<th width="9%" valign="top" align="right">' . __( 'Price Ex', PDFLANGUAGE ) . '</th>' . | |
'<th width="9%" valign="top" align="right">' . __( 'Total Ex.', PDFLANGUAGE ) . '</th>' . | |
'<th width="7%" valign="top" align="right">' . __( 'Tax Rate', PDFLANGUAGE ) . '</th>' . | |
'<th width="10%" valign="top" align="right">' . __( 'Price Inc', PDFLANGUAGE ) . '</th>' . | |
'<th width="10%" valign="top" align="right">' . __( 'Total Inc', PDFLANGUAGE ) . '</th>' . | |
'</tr>' . | |
'</thead>' . | |
'</table>'; | |
return $headers; | |
} | |
/** | |
* Change Tax to Tax Rate | |
*/ | |
add_filter ( 'pdf_template_line_output' , 'custom_pdf_lines', 10, 2 ); | |
function custom_pdf_lines ( $line, $order_id ) { | |
global $woocommerce; | |
$order = new WC_Order( $order_id ); | |
// Check WC version – changes for WC 3.0.0 | |
$pre_wc_30 = version_compare( WC_VERSION, '3.0', '<' ); | |
$order_currency = $pre_wc_30 ? $order->get_order_currency() : $order->get_currency(); | |
$pdflines = '<table width="100%">'; | |
$pdflines .= '<tbody>'; | |
if ( sizeof( $order->get_items() ) > 0 ) { | |
foreach ( $order->get_items() as $item ) { | |
if ( $item['qty'] ) { | |
$line = ''; | |
// $item_loop++; | |
$_product = $order->get_product_from_item( $item ); | |
$item_name = $item['name']; | |
$item_id = $pre_wc_30 ? $item['variation_id'] : $item->get_id(); | |
$meta_display = ''; | |
if ( version_compare( WC_VERSION, '3.0', '<' ) ) { | |
$item_meta = new WC_Order_Item_Meta( $item ); | |
$meta_display = $item_meta->display( true, true ); | |
$meta_display = $meta_display ? ( ' ( ' . $meta_display . ' )' ) : ''; | |
} else { | |
foreach ( $item->get_formatted_meta_data() as $meta_key => $meta ) { | |
$meta_display .= '<br /><small>(' . $meta->display_key . ':' . wp_kses_post( strip_tags( $meta->display_value ) ) . ')</small>'; | |
} | |
} | |
if ( $meta_display ) { | |
$meta_output = apply_filters( 'pdf_invoice_meta_output', $meta_display ); | |
$item_name .= $meta_output; | |
} | |
$line = '<tr>' . | |
'<td valign="top" width="5%" align="right">' . $item['qty'] . ' x</td>' . | |
'<td valign="top" width="50%">' . stripslashes( $item_name ) . '</td>' . | |
'<td valign="top" width="9%" align="right">' . wc_price( $item['line_subtotal'] / $item['qty'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'<td valign="top" width="9%" align="right">' . wc_price( $item['line_subtotal'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'<td valign="top" width="7%" align="right">' . 100 * ( $item['line_subtotal_tax']/$item['line_subtotal'] ) . '%' . '</td>' . | |
'<td valign="top" width="10%" align="right">' . wc_price( ( $item['line_subtotal'] + $item['line_subtotal_tax'] ) / $item['qty'], array( 'currency' => $order_currency ) ). '</td>' . | |
'<td valign="top" width="10%" align="right">' . wc_price( $item['line_subtotal'] + $item['line_subtotal_tax'], array( 'currency' => $order_currency ) ). '</td>' . | |
'</tr>'; | |
$pdflines .= $line; | |
} | |
} | |
} | |
$pdflines .= '</tbody>'; | |
$pdflines .= '</table>'; | |
return $pdflines; | |
} |
Adding additional fields to the admin and output PDF
↑ Back to topadd_action ( 'woocommerce_pdf_invoice_additional_fields_admin' , 'custom_woocommerce_pdf_admin_field' ); function custom_woocommerce_pdf_admin_field() { $woocommerce_pdf_invoice_options = get_option('woocommerce_pdf_invoice_settings'); ?> <!-- Custom PDF Field --> <tr valign="top"> <th scope="row" class="titledesc"> <label for="woocommerce_pdf_invoice_settings[custom_text]">Custom text for invoice</label> <img class="help_tip" data-tip="Add some custom text to your invoice" src="<?php echo plugins_url( 'woocommerce/assets/images/help.png' );?>" height="16" width="16" /> </th> <td class="forminp forminp-number"> <input id="woocommerce_pdf_invoice_settings[custom_text]" name="woocommerce_pdf_invoice_settings[custom_text]" type="text" value="<?php if ( isset($woocommerce_pdf_invoice_options['custom_text']) ) { echo $woocommerce_pdf_invoice_options['custom_text']; }?>" placeholder="" style="width: 350px;"/> </td> </tr> <?php }Once this code is added to your theme functions.php you will see To add this field to the PDF file you need to add a placeholder – [[CUSTOMFIELD]] – to the template file. Once you have the placeholder added you will need to hook in to the output function.
add_action ( 'pdf_content_additional_content' , 'custom_pdf_additional_content' ); function custom_pdf_additional_content( $content ) { global $woocommerce; $woocommerce_pdf_invoice_options = get_option( 'woocommerce_pdf_invoice_settings' ); $content = str_replace( '[[CUSTOMFIELD]]', $woocommerce_pdf_invoice_options['custom_text'], $content ); return $content; }
Examples of adding additional content to the invoice
↑ Back to topExample template.php file used for the adding terms and conditions area example
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
<style> | |
@page { | |
margin: 480px 50px 150px 50px; | |
} | |
#header { | |
position: fixed; | |
left: 0px; | |
top: -460px; | |
right: 0px; | |
height: 480px; /* must match the 1st margin setting in @page */ | |
text-align: center; | |
} | |
#footer { | |
position: fixed; | |
left: 0px; | |
bottom: -200px; | |
right: 0px; | |
height: 150px; /* must match the 3rd margin setting in @page */ | |
font-size:11px; | |
text-align: center; | |
} | |
#content { | |
font-size:11px; | |
} | |
</style> | |
<body> | |
<div id="header"> | |
<table table width="100%"> | |
<tr> | |
<td valign="top" colspan="2">[[PDFLOGO]]</td> | |
<td valign="top" colspan="2">[[PDFCOMPANYNAME]]<br />[[PDFCOMPANYDETAILS]]<br /></td> | |
</tr> | |
<tr> | |
<td width="20%" valign="top"><?php echo apply_filters( 'pdf_template_invoice_number_text', __( 'Invoice No. :', PDFLANGUAGE ) ); ?></td> | |
<td width="30%" valign="top">[[PDFINVOICENUM]]</td> | |
<td width="20%" valign="top"><?php echo apply_filters( 'pdf_template_order_number_text', __( 'Order No. :', PDFLANGUAGE ) ); ?></td> | |
<td width="30%" valign="top">[[PDFORDERENUM]]</td> | |
</tr> | |
<tr> | |
<td valign="top"><?php echo apply_filters( 'pdf_template_invoice_date_text', __( 'Invoice Date :', PDFLANGUAGE ) ); ?></td> | |
<td valign="top">[[PDFINVOICEDATE]]</td> | |
<td valign="top"><?php echo apply_filters( 'pdf_template_order_date_text', __( 'Order Date :', PDFLANGUAGE ) ); ?></td> | |
<td valign="top">[[PDFORDERDATE]]</td> | |
</tr> | |
<tr> | |
<td valign="top"><?php echo apply_filters( 'pdf_template_payment_method_text', __( 'Payment Method :', PDFLANGUAGE ) ); ?></td> | |
<td valign="top">[[PDFINVOICEPAYMENTMETHOD]]</td> | |
<td valign="top"> </td> | |
<td valign="top"> </td> | |
</tr> | |
<tr> | |
<td valign="top" colspan="2"> | |
<?php echo apply_filters( 'pdf_template_billing_details_text', __( '<h3>Billing Details</h3>', PDFLANGUAGE ) ); ?> | |
[[PDFBILLINGADDRESS]]<br /> | |
[[PDFBILLINGTEL]]<br /> | |
[[PDFBILLINGEMAIL]] | |
</td> | |
<td valign="top" colspan="2"> | |
<?php echo apply_filters( 'pdf_template_shipping_details_text', __( '<h3>Shipping Details</h3>', PDFLANGUAGE ) ); ?> | |
[[PDFSHIPPINGADDRESS]] | |
</td> | |
</tr> | |
</table> | |
</div> | |
<div id="footer"> | |
<div class="copyright"><?php echo apply_filters( 'pdf_template_registered_name_text', __( 'Registered Name : ', PDFLANGUAGE ) ); ?>[[PDFREGISTEREDNAME]] <?php echo apply_filters( 'pdf_template_registered_office_text', __( 'Registered Office : ', PDFLANGUAGE ) ); ?>[[PDFREGISTEREDADDRESS]]</div> | |
<div class="copyright"><?php echo apply_filters( 'pdf_template_company_number_text', __( 'Company Number : ', PDFLANGUAGE ) ); ?>[[PDFCOMPANYNUMBER]] <?php echo apply_filters( 'pdf_template_vat_number_text', __( 'VAT Number : ', PDFLANGUAGE ) ); ?>[[PDFTAXNUMBER]]</div> | |
</div> | |
<div id="content"> | |
[[ORDERINFOHEADER]] | |
[[ORDERINFO]] | |
<table table width="100%"> | |
<tr> | |
<td width="70%" valign="top"> | |
[[PDFORDERNOTES]] | |
</td> | |
<td width="30%" valign="top" align="right"> | |
<table width="100%"> | |
[[PDFORDERSUBTOTAL]] | |
[[PDFORDERTAX]] | |
[[PDFORDERSHIPPING]] | |
[[PDFORDERDISCOUNT]] | |
[[PDFORDERTOTAL]] | |
</table> | |
</td> | |
</tr> | |
</table> | |
<table table width="100%"> | |
<tr> | |
<td width="100%" valign="top"> | |
[[PDFTERMSCONDITIONS]] | |
</td> | |
</tr> | |
</table> | |
</div> | |
</body> | |
</html> |
Adding terms and conditions area to the invoice
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Adding terms and conditions area to the invoice | |
* | |
* Uses template tag [[PDFTERMSCONDITIONS]] | |
* | |
* settings field name : woocommerce_pdf_invoice_settings[invoice_terms] | |
* | |
* 1 – Edit template.php and add the tag in the desired place | |
* 2 – add code to the theme functions.php file | |
* 3 – add text in PDF Invoice settings | |
*/ | |
add_action ( 'woocommerce_pdf_invoice_additional_fields_admin' , 'additional_fields_admin_terms' ); | |
function additional_fields_admin_terms() { | |
$woocommerce_pdf_invoice_options = get_option('woocommerce_pdf_invoice_settings'); | |
?> | |
<!– Terms and Conditions –> | |
<tr valign="top"> | |
<th scope="row" class="titledesc"> | |
<label for="woocommerce_pdf_invoice_settings[invoice_terms]">Invoice Terms and Conditions</label> | |
<img class="help_tip" data-tip="Add some custom text to your invoice" src="<?php echo plugins_url( 'woocommerce/assets/images/help.png' );?>" height="16" width="16" /> | |
</th> | |
<td class="forminp forminp-number"> | |
<textarea id="woocommerce_pdf_invoice_settings[invoice_terms]" | |
name="woocommerce_pdf_invoice_settings[invoice_terms]" | |
value="" | |
placeholder="" style="width: 350px;"/><?php if ( isset($woocommerce_pdf_invoice_options['invoice_terms']) ) { echo $woocommerce_pdf_invoice_options['invoice_terms']; }?></textarea> | |
</td> | |
</tr> | |
<?php | |
} | |
add_filter ( 'pdf_content_additional_content' , 'pdf_additional_content_terms' ); | |
function pdf_additional_content_terms( $content ) { | |
$woocommerce_pdf_invoice_options = get_option('woocommerce_pdf_invoice_settings'); | |
if ( isset($woocommerce_pdf_invoice_options['invoice_terms']) ) : | |
$content = str_replace( '[[PDFTERMSCONDITIONS]]', $woocommerce_pdf_invoice_options['invoice_terms'], $content ); | |
endif; | |
return $content; | |
} | |
/* Close terms and conditions */ |
Add Bank Details to footer from WooCommerce BACS settings
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Add Bank Details to footer from WooCommerce BACS settings | |
* | |
* Uses template tag [[PDFBANKDETAILS]] | |
* | |
* 1 – Add the template tag to template.php | |
* 2 – Add this code to the theme functions.php | |
* 3 – check invoice layout and modify CSS in template.php as necessary | |
*/ | |
add_filter ( 'pdf_content_additional_content', 'pdf_additional_content_bank_details_footer', 10, 2 ); | |
function pdf_additional_content_bank_details_footer( $content, $order_id ) { | |
// Get order and store in $order. | |
$order = wc_get_order( $order_id ); | |
$has_details = false; | |
// Get sortcode label in the $locale array and use appropriate one. | |
$sortcode = __( 'Sort code', 'woocommerce' ); | |
$bacs_accounts = get_option( 'woocommerce_bacs_accounts' ); | |
if ( ! empty( $bacs_accounts ) ) { | |
$account_html = '<table>'; | |
foreach ( $bacs_accounts as $bacs_account ) { | |
$bacs_account = (object) $bacs_account; | |
if ( $bacs_account->account_name ) { | |
$account_html .= '<tr><td class="wc-bacs-bank-details-account-name">' . wp_kses_post( wp_unslash( $bacs_account->account_name ) ) . ':</td>' . PHP_EOL; | |
} | |
// $account_html .= '<tr class="wc-bacs-bank-details order_details bacs_details">' . PHP_EOL; | |
// BACS account fields shown on the thanks page and in emails. | |
$account_fields = apply_filters( | |
'woocommerce_bacs_account_fields', array( | |
'bank_name' => array( | |
'label' => __( 'Bank', 'woocommerce' ), | |
'value' => $bacs_account->bank_name, | |
), | |
'account_number' => array( | |
'label' => __( 'Account number', 'woocommerce' ), | |
'value' => $bacs_account->account_number, | |
), | |
'sort_code' => array( | |
'label' => $sortcode, | |
'value' => $bacs_account->sort_code, | |
), | |
'iban' => array( | |
'label' => __( 'IBAN', 'woocommerce' ), | |
'value' => $bacs_account->iban, | |
), | |
'bic' => array( | |
'label' => __( 'BIC', 'woocommerce' ), | |
'value' => $bacs_account->bic, | |
), | |
), $order_id | |
); | |
foreach ( $account_fields as $field_key => $field ) { | |
if ( ! empty( $field['value'] ) ) { | |
$account_html .= '<td class="' . esc_attr( $field_key ) . '">' . wp_kses_post( $field['label'] ) . ': <strong><br />' . wp_kses_post( wptexturize( $field['value'] ) ) . '</strong></td>' . PHP_EOL; | |
$has_details = true; | |
} | |
} | |
$account_html .= '</tr>'; | |
} | |
$account_html .= '</table>'; | |
} | |
if ( $has_details ) { | |
$pdfbankdetails = '<section class="woocommerce-bacs-bank-details">' . esc_html__( 'Our bank details', 'woocommerce' ) . '' . wp_kses_post( PHP_EOL . $account_html ) . '</section>'; | |
$content = str_replace( '[[PDFBANKDETAILS]]', $pdfbankdetails, $content ); | |
} else { | |
$content = str_replace( '[[PDFBANKDETAILS]]', '', $content ); | |
} | |
return $content; | |
} | |
Add Bank Details under notes section from WooCommerce BACS settings
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Add Bank Details under notes section from WooCommerce BACS settings | |
* | |
* Uses template tag [[PDFBANKDETAILS]] | |
* | |
* 1 – Add the template tag to template.php | |
* 2 – Add this code to the theme functions.php | |
* 3 – check invoice layout and modify CSS in template.php as necessary | |
*/ | |
add_filter ( 'pdf_content_additional_content' , 'pdf_additional_content_bank_details' ); | |
function pdf_additional_content_bank_details( $content ) { | |
$woocommerce_bacs_settings = get_option( 'woocommerce_bacs_settings' ); | |
$pdfbankdetails = '<h2>Bank Details</h2>'; | |
$pdfbankdetails .= '<table width="100%">'; | |
if( $woocommerce_bacs_settings['account_name'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">Account Name</td><td width="50%">' .$woocommerce_bacs_settings['account_name']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
if( $woocommerce_bacs_settings['account_number'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">Account Number</td><td width="50%">' .$woocommerce_bacs_settings['account_number']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
if( $woocommerce_bacs_settings['sort_code'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">Sort Code</td><td width="50%">' .$woocommerce_bacs_settings['sort_code']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
if( $woocommerce_bacs_settings['bank_name'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">Bank Name</td><td width="50%">' .$woocommerce_bacs_settings['bank_name']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
if( $woocommerce_bacs_settings['iban'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">IBAN</td><td width="50%">' .$woocommerce_bacs_settings['iban']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
if( $woocommerce_bacs_settings['bic'] ) : | |
$pdfbankdetails.= '<tr>'; | |
$pdfbankdetails.= '<td width="50%">BIC</td><td width="50%">' .$woocommerce_bacs_settings['bic']. '</td>'; | |
$pdfbankdetails.= '</tr>'; | |
endif; | |
$pdfbankdetails.= '</table>'; | |
$content = str_replace( '[[PDFBANKDETAILS]]', $pdfbankdetails, $content ); | |
return $content; | |
} |
Add a custom field from the order
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Add billing field to Billing section, eg mobile number. | |
// Uses a placeholder [[PDFBILLINGMOBILE]] in the template file | |
add_filter( 'pdf_content_additional_content', 'custom_pdf_content_additional_content', 10, 2 ); | |
function custom_pdf_content_additional_content( $content, $order_id ) { | |
$content = str_replace( '[[PDFBILLINGMOBILE]]', get_post_meta( $order_id,'mobile',TRUE ), $content ); | |
return $content; | |
} |
Add billing and or shipping title to the address area
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Add a field to the customer's address, eg title | |
add_filter( 'woocommerce_order_formatted_billing_address', 'pdf_invoice_woocommerce_order_formatted_billing_address', 10, 2 ); | |
function pdf_invoice_woocommerce_order_formatted_billing_address( $address, $order ) { | |
// Add the post meta from the order | |
$billing_title = get_post_meta( $order->get_id(), 'billing_title', TRUE ); | |
// Add $billing title to the beginning of the address | |
$address = array( "billing_title" => $billing_title ) + $address; | |
// Return the address | |
return $address; | |
} | |
add_filter('woocommerce_formatted_address_replacements', 'pdf_invoice_add_woocommerce_formatted_address_replacements', 10, 2); | |
function pdf_invoice_add_woocommerce_formatted_address_replacements($replace, $args) { | |
$replace['{title}'] = $args['title']; | |
$replace['{name}'] = $args['title']." ".$args['first_name']." ".$args['last_name']; //show title along with name | |
return $replace; | |
} | |
add_filter( 'woocommerce_order_formatted_billing_address', 'pdf_invoice_update_formatted_billing_address', 10, 2); | |
function pdf_invoice_update_formatted_billing_address( $address, $order ){ | |
$address_fields = array( | |
'title', | |
'first_name', | |
'last_name', | |
'company', | |
'address_1', | |
'address_2', | |
'city', | |
'state', | |
'postcode', | |
'country' | |
); | |
if( is_array($address_fields) ) { | |
foreach( $address_fields as $address_field ){ | |
$field = "get_billing_" . $address_field; | |
if( method_exists( $order, $field ) ) { | |
$address[$address_field] = $order->$field(); | |
} else { | |
$address[$address_field] = $order->{'billing_'.$address_field}; | |
} | |
} | |
} | |
return $address; | |
} | |
add_filter( 'woocommerce_order_formatted_shipping_address', 'pdf_invoice_update_formatted_shipping_address', 10, 2); | |
function pdf_invoice_update_formatted_shipping_address( $address, $order ){ | |
$address_fields = array( | |
'title', | |
'first_name', | |
'last_name', | |
'company', | |
'address_1', | |
'address_2', | |
'city', | |
'state', | |
'postcode', | |
'country' | |
); | |
if( is_array($address_fields) ) { | |
foreach( $address_fields as $address_field ){ | |
$field = "get_shipping_" . $address_field; | |
if( method_exists( $order, $field ) ) { | |
$address[$address_field] = $order->$field(); | |
} else { | |
$address[$address_field] = $order->{'shipping_'.$address_field}; | |
} | |
} | |
} | |
return $address; | |
} |
Modifying the invoice table headers and content
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Modifying Headers | |
* | |
* Add to your theme functions.php | |
*/ | |
add_filter( 'pdf_template_table_headings','custom_pdf_template_table_headings' ); | |
function custom_pdf_template_table_headings( $headers ) { | |
$headers = '<table class="shop_table orderdetails" width="100%">' . | |
'<thead>' . | |
'<tr><th colspan="7" align="left"><h2>' . esc_html__('Order Details', PDFLANGUAGE) . '</h2></th></tr>' . | |
'<tr>' . | |
'<th width="10%" valign="top" align="right">' . __( 'Qty', PDFLANGUAGE ) . '</th>' . | |
'<th width="54%" valign="top" align="left">' . __( 'Product', PDFLANGUAGE ) . '</th>' . | |
'<th width="18%" valign="top" align="right">' . __( 'Price Inc', PDFLANGUAGE ) . '</th>' . | |
'<th width="18%" valign="top" align="right">' . __( 'Total Inc', PDFLANGUAGE ) . '</th>' . | |
'</tr>' . | |
'</thead>' . | |
'</table>'; | |
return $headers; | |
} | |
add_filter( 'pdf_template_line_output' , 'custom_pdf_template_line_output', 10, 2 ); | |
function custom_pdf_template_line_output( $pdflines, $order_id ) { | |
global $woocommerce; | |
$order = new WC_Order( $order_id ); | |
$order_currency = $order->get_currency(); | |
$pdflines = '<table width="100%">'; | |
$pdflines .= '<tbody>'; | |
if ( sizeof( $order->get_items() ) > 0 ) : | |
foreach ( $order->get_items() as $item ) { | |
if ( $item['qty'] ) { | |
$line = ''; | |
// $item_loop++; | |
$_product = $order->get_product_from_item( $item ); | |
$item_name = $item['name']; | |
$item_meta = new WC_Order_Item_Meta( $item['item_meta'] ); | |
if ( $meta = $item_meta->display( true, true ) ) | |
$item_name .= ' ( ' . $meta . ' )'; | |
$line = '<tr>' . | |
'<td valign="top" width="10%" align="right">' . $item['qty'] . ' x</td>' . | |
'<td valign="top" width="54%">' . $item_name . '</td>' . | |
'<td valign="top" width="18%" align="right">' . wc_price( ( $item['line_subtotal'] + $item['line_tax'] ) / $item['qty'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'<td valign="top" width="18%" align="right">' . wc_price( $item['line_subtotal'] + $item['line_tax'], array( 'currency' => $order_currency ) ) . '</td>' . | |
'</tr>' ; | |
$pdflines .= $line; | |
} | |
} | |
endif; | |
$pdflines .= '</tbody>'; | |
$pdflines .= '</table>'; | |
return $pdflines; | |
} | |
/* Close Modifying Headers */ |
Changes In Version 1.3.0
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* [get_pdf_order_totals description] | |
* New for Version 1.3.0, replaces several functions with one looped function | |
* @param [type] $order_id [description] | |
* @return [type] [description] | |
*/ | |
function get_pdf_order_totals( $order_id ) { | |
global $woocommerce; | |
if (!$order_id) return; | |
$order = new WC_Order( $order_id ); | |
$order_item_totals = $order->get_order_item_totals(); | |
unset( $order_item_totals['payment_method'] ); | |
$output = ''; | |
foreach ( $order_item_totals as $order_item_total ) { | |
$output .= '<tr>' . | |
'<td align="right">' . | |
'<strong>' . $order_item_total['label'] . '</strong></td>' . | |
'<td align="right"><strong>' . $order_item_total['value'] . '</strong></td>' . | |
'</tr>' ; | |
} | |
$output = apply_filters( 'pdf_template_order_totals' , $output, $order_id ); | |
return $output; | |
} |
Reorder the invoice totals section
↑ Back to topUsing the [[PDFORDERTOTALS]] Tag
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Reorder the totals output | |
* | |
* Shipping | |
* Subtotal | |
* Taxes | |
* Total | |
* | |
* Changes the SubTotal to include the shipping cost | |
*/ | |
add_filter( 'pdf_template_order_totals', 'custom_totals_layout_pdf_template_order_totals', 10, 2 ); | |
function custom_totals_layout_pdf_template_order_totals( $output, $order_id ){ | |
global $woocommerce; | |
if (!$order_id) return; | |
$order = new WC_Order( $order_id ); | |
// Check WC version – changes for WC 3.0.0 | |
$pre_wc_30 = version_compare( WC_VERSION, '3.0', '<' ); | |
$order_currency = $pre_wc_30 ? $order->get_order_currency() : $order->get_currency(); | |
$order_item_totals = $order->get_order_item_totals(); | |
// Clean up shipping value | |
// Use this line if you just want the shipping value, without the description | |
// $order_item_totals['shipping']['value'] = wc_price( round( $order->get_shipping_total(), wc_get_price_decimals() ), array( 'currency' => $order_currency ) ); | |
// Grab the basics | |
$cart_subtotal = $order_item_totals['cart_subtotal']; | |
$shipping = $order_item_totals['shipping']; | |
$order_total = $order_item_totals['order_total']; | |
// Modify the subtotal to include shipping | |
$subtotal = $order->get_subtotal(); | |
$shipping_cost = $order->get_shipping_total(); | |
$new_subtotal = wc_price( round( ($subtotal + $shipping_cost), wc_get_price_decimals() ), array( 'currency' => $order_currency ) ); | |
$replace_subtotal = wc_price( $subtotal, array( 'currency' => $order_currency ) ); | |
// Update the subtotal array | |
$cart_subtotal = str_replace( $replace_subtotal, $new_subtotal, $cart_subtotal ); | |
// Remove everything except taxes | |
unset( $order_item_totals['cart_subtotal'] ); | |
unset( $order_item_totals['shipping'] ); | |
unset( $order_item_totals['payment_method'] ); | |
unset( $order_item_totals['order_total'] ); | |
// Start building a new array in the right order | |
$new_order_item_totals['shipping'] = $shipping; | |
$new_order_item_totals['cart_subtotal'] = $cart_subtotal; | |
// Taxes | |
foreach ( $order_item_totals as $key => $value ) { | |
$new_order_item_totals[$key] = $value; | |
} | |
$new_order_item_totals['order_total'] = $order_total; | |
$output = ''; | |
foreach ( $new_order_item_totals as $order_item_total ) { | |
$output .= '<tr>' . | |
'<td align="right">' . | |
'<strong>' . $order_item_total['label'] . '</strong></td>' . | |
'<td align="right"><strong>' . $order_item_total['value'] . '</strong></td>' . | |
'</tr>' ; | |
} | |
if( $order->get_total_refunded() > 0 ) { | |
$output .= '<tr>' . | |
'<td align="right">' . | |
'<strong>Amount Refunded:</strong></td>' . | |
'<td align="right"><strong>' . wc_price( $order->get_total_refunded(), array( 'currency' => $order_currency ) ) . '</strong></td>' . | |
'</tr>' ; | |
} | |
return $output; | |
} |
Using the individual template tags
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$output = apply_filters( 'pdf_template_order_subtotal' , $output, $order_id ); | |
$output = apply_filters( 'pdf_template_order_shipping' , $output, $order_id ); | |
$output = apply_filters( 'pdf_template_order_discount' , $output, $order_id ); | |
$output = apply_filters( 'pdf_template_order_tax' , $output, $order_id ); | |
$output = apply_filters( 'pdf_template_order_total' , $output, $order_id ); |
Full List Of Available Filters
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Modify the $order_status_array and add your own order status | |
* add_filter ( 'pdf_invoice_order_status_array', 'add_custom_order_status_to_pdf_invoice_order_status_array', 99, 2 ); | |
* | |
* function add_custom_order_status_to_pdf_invoice_order_status_array ( $order_status_array ) { | |
* $order_status_array[] = 'dispensing'; | |
* return $order_status_array; | |
* } | |
* | |
* Modify the $order_status_array and replace it with own array | |
* add_filter ( 'pdf_invoice_order_status_array', 'add_custom_order_status_to_pdf_invoice_order_status_array', 99, 2 ); | |
* | |
* function add_custom_order_status_to_pdf_invoice_order_status_array ( $order_status_array ) { | |
* $order_status_array = array('dispensing'); | |
* return $order_status_array; | |
* } | |
* | |
*/ | |
$order_status_array = apply_filters( 'pdf_invoice_order_status_array', $order_status_array ); | |
/** | |
* add_filter( 'woocommerce_pdf_my_account_button_label', 'change_pdf_my_account_button_label' ); | |
* | |
* function change_pdf_my_account_button_label( $lable ) { | |
* return 'Download your invoice'; | |
* } | |
*/ | |
apply_filters('woocommerce_pdf_my_account_button_label', __( 'PDF Invoice', 'woocommerce-pdf-invoice' ) ) | |
// Allow $user_id to be filtered | |
$user_id = apply_filters( 'pdf_invoice_download_user_id', $user_id, $current_user, $orderid ); | |
// Add an invoice link to the thank you page | |
apply_filters( 'pdf_invoice_invoice_link_thanks', $invoice_link_thanks, $order_id ); | |
// Add a filter for the array | |
$email_ids = apply_filters( 'pdf_invoice_email_ids', $email_ids, $order ); | |
// Apply a filter to modify the PDF if required | |
$pdf = apply_filters( 'pdf_invoice_modify_attachment', $pdf, $id, $order ); | |
// Filter the filename | |
$filename = apply_filters( 'pdf_output_filename', $filename, $order_id ); | |
// filter the meta output | |
$meta_output = apply_filters( 'pdf_invoice_meta_output', $meta_display ); | |
/** | |
* Allow additional info to be added to the $item_name | |
* | |
* add_filter( 'pdf_invoice_item_name', 'add_product_description_pdf_invoice_item_name', 10, 4 ); | |
* | |
* function add_product_description_pdf_invoice_item_name( $item_name, $item, $product, $order ) { | |
* | |
* // Use $product->get_id() if you want to get the post id for the product. | |
* $item_name .= '<p>' . $product->get_description() . '</p>'; | |
* return $item_name; | |
* | |
* } | |
*/ | |
$item_name = apply_filters( 'pdf_invoice_item_name', $item_name, $item, $_product, $order ); | |
// Modify the Products setion of the invoice | |
$pdf = apply_filters( 'pdf_template_line_output', $pdflines, $order_id ); | |
// Modify the order note | |
$output = apply_filters( 'pdf_template_order_notes' , $output, $order_id ); | |
/** | |
* Not used by default | |
*/ | |
// Modify the Subtotal | |
$output = apply_filters( 'pdf_template_order_subtotal' , $output, $order_id ); | |
// Modify the shipping | |
$output = apply_filters( 'pdf_template_order_shipping' , $output, $order_id ); | |
// Modify the coupons | |
$output = apply_filters( 'pdf_template_order_coupons' , $output, $order_id ); | |
// Modify the discount | |
$output = apply_filters( 'pdf_template_order_discount' , $output, $order_id ); | |
// Modify the taxes | |
$output = apply_filters( 'pdf_template_order_tax' , $output, $order_id ); | |
// Modify the order total | |
$output = apply_filters( 'pdf_template_order_total' , $output, $order_id ); | |
/** | |
* Used by default | |
*/ | |
// Modify the order totals | |
$output = apply_filters( 'pdf_template_order_totals' , $output, $order_id ); | |
// Modify the table headings | |
apply_filters( 'pdf_template_table_headings', $headers, $order_id ); | |
// Modify $content | |
$content = apply_filters( 'pdf_content_additional_content' , $content , $order_id ); | |
/** | |
* Filter the $page_id for reasons, for example, chage the terms page based on products in the order of the order language. | |
*/ | |
$page_id = apply_filters( 'pdf_invoice_terms_page_id', $page_id, $order_id ); | |
// Filter the content of the T&Cs as per any other WordPress page | |
$terms = apply_filters( 'the_content', $post->post_content ); | |
// Template Filters. | |
// These filters are rarely used, if you need to translate these outputs and don't want to edit the template then Loco Translate is a better option. | |
apply_filters( 'pdf_template_invoice_number_text', __( 'Invoice No. :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_order_number_text', __( 'Order No. :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_invoice_date_text', __( 'Invoice Date :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_order_date_text', __( 'Order Date :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_payment_method_text', __( 'Payment Method :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_shipping_method_text', __( 'Shipping Method :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_payment_status_text', __( 'Payment Status :', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_billing_details_text', __( 'Billing Details', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_shipping_details_text', __( 'Shipping Details', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_registered_name_text', __( 'Registered Name : ', 'woocommerce-pdf-invoice' ) ); | |
echo apply_filters( 'pdf_template_registered_office_text', __( 'Registered Office : ', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_company_number_text', __( 'Company Number : ', 'woocommerce-pdf-invoice' ) ); | |
apply_filters( 'pdf_template_vat_number_text', __( 'VAT Number : ', 'woocommerce-pdf-invoice' ) ); | |
// Modify the settings | |
do_action( 'woocommerce_pdf_invoice_settings_action' ); | |
Example of PDF Invoice HTML
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<style> | |
body { | |
font-family: "DejaVu Sans", "DejaVu Sans Mono", "DejaVu", sans-serif, monospace; | |
font-size: 11px; | |
} | |
@page { | |
margin: 480px 50px 100px 50px; | |
} | |
#header { | |
position: fixed; | |
left: 0px; | |
top: -460px; | |
right: 0px; | |
height: 480px; | |
text-align: center; | |
} | |
#footer { | |
position: fixed; | |
left: 0px; | |
bottom: -150px; | |
right: 0px; | |
height: 100px; | |
font-size:11px; | |
text-align: center; | |
} | |
#content { | |
font-size:10px; | |
} | |
#logo img { | |
max-width:340px; | |
} | |
.barcode { | |
text-align:center; | |
width: 50%; | |
} | |
.page_break { | |
page-break-before: always; | |
} | |
.shop_table { | |
} | |
.orderdetails { | |
} | |
.ordercontent { | |
} | |
.pdf_table_row { | |
} | |
.pdf_table_cell { | |
} | |
.pdf_table_row_title { | |
} | |
.pdf_table_cell_title { | |
} | |
.pdf_table_row_heading { | |
} | |
.pdf_table_cell_heading { | |
} | |
.pdf_table_row_odd { | |
} | |
.pdf_table_row_even { | |
} | |
.pdf_table_cell_odd { | |
} | |
.pdf_table_cell_even { | |
} | |
</style> | |
</head> | |
<body> | |
<div id="header"> | |
<table table width="100%"> | |
<tr> | |
<td valign="top" width="50%" id="logo"><img src="/var/www/woocommerce-opayo.com/html/wp-content/uploads/2021/08/logo-1.png" /></td> | |
<td valign="top" width="50%" id="company-info">Billy's Bits and Bobs<br /><br /></td> | |
</tr> | |
</table> | |
<table table width="100%"> | |
<tr> | |
<td width="20%" valign="top" id="invoicenumberheading">Invoice No.</td> | |
<td width="30%" valign="top" id="invoicenumber">BBB-00167-WEB</td> | |
<td width="20%" valign="top" id="ordernumberheading">Order No.</td> | |
<td width="30%" valign="top" id="ordernumber">663</td> | |
</tr> | |
<tr> | |
<td valign="top" id="invoicedateheading">Invoice Date</td> | |
<td valign="top" id="invoicedate">07 Oct 2021</td> | |
<td valign="top" id="orderdateheading">Order Date</td> | |
<td valign="top" id="orderdate">07 Oct 2021</td> | |
</tr> | |
<tr> | |
<td valign="top" id="paymethodheading">Payment Method</td> | |
<td valign="top" id="paymethod">Credit Card Via Opayo</td> | |
<td valign="top" id="shipmethodheading"></td> | |
<td valign="top" id="shipmethod"></td> | |
</tr> | |
<tr> | |
<td valign="top" colspan="2" id="billingdetails"> | |
<h3>Billing Details</h3> | |
Test First Name Test Last Name<br/>88 Test Street<br/>Townville<br/>Test County<br/>ST41 2PQ<br /> | |
01234 565656<br /> | |
andrew@chromeorange.co.uk | |
</td> | |
<td valign="top" colspan="2" id="shippingdetails"> | |
<h3>Shipping Details</h3> | |
Test First Name Test Last Name<br/>88 Test Street<br/>Townville<br/>Test County<br/>ST41 2PQ | |
</td> | |
</tr> | |
</table> | |
</div> | |
<div id="footer"> | |
<div class="copyright">Registered Name : Billy's Bits and Bobs </div> | |
<div class="copyright">Company Number : 0123456789 VAT Number : 9876543210</div> | |
</div> | |
<div id="content"> | |
<table class="shop_table orderdetails" width="100%"> | |
<thead> | |
<tr class="pdf_table_row pdf_table_row_title"> | |
<th colspan="7" align="left" class="pdf_table_cell pdf_table_cell_title"> | |
<h2>Order Details</h2> | |
</th> | |
</tr> | |
<tr class="pdf_table_row pdf_table_row_heading"> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="5%" valign="top" align="right">Qty</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="50%" valign="top" align="left">Product</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="9%" valign="top" align="right">Price Ex</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="9%" valign="top" align="right">Total Ex.</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="7%" valign="top" align="right">Tax</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="10%" valign="top" align="right">Price Inc</th> | |
<th class="pdf_table_cell pdf_table_cell_heading" width="10%" valign="top" align="right">Total Inc</th> | |
</tr> | |
</thead> | |
</table> | |
<table width="100%" class="shop_table ordercontent"> | |
<tbody> | |
<tr class="pdf_table_row pdf_table_row_odd"> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="5%" align="right">1 x</td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="50%">Subscription</td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="9%" align="right"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>5.00</bdi></span></td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="9%" align="right"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>5.00</bdi></span></td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="7%" align="right"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>1.00</bdi></span></td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="10%" align="right"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>6.00</bdi></span></td> | |
<td class="pdf_table_cell pdf_table_cell_odd" valign="top" width="10%" align="right"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>6.00</bdi></span></td> | |
</tr></tbody></table> | |
<div class="barcode"></div> | |
<table width="100%"> | |
<tr> | |
<td width="60%" valign="top" id="ordernotes"> | |
</td> | |
<td width="40%" valign="top" align="right"> | |
<table width="100%" id="ordertotals"> | |
<tr class="pdfordertotals_row"> | |
<td align="right" class="pdfordertotals_cell"><strong>Subtotal:</strong></td> | |
<td align="right" class="pdfordertotals_cell"><strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>5.00</bdi></span></strong></td> | |
</tr> | |
<tr class="pdfordertotals_row"> | |
<td align="right" class="pdfordertotals_cell"><strong>VAT:</strong></td> | |
<td align="right" class="pdfordertotals_cell"><strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>1.00</bdi></span></strong></td> | |
</tr> | |
<tr class="pdfordertotals_row"> | |
<td align="right" class="pdfordertotals_cell"><strong>Total:</strong></td> | |
<td align="right" class="pdfordertotals_cell"><strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">£</span>6.00</bdi></span></strong></td> | |
</tr> | |
</table> | |
</td> | |
</tr> | |
</table> | |
</div> | |
</body> | |
</html> |
Invoice IDs and Classes
↑ Back to top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IDs : | |
header | |
logo | |
company-info | |
invoicenumberheading | |
invoicenumber | |
ordernumberheading | |
ordernumber | |
invoicedateheading | |
invoicedate | |
orderdateheading | |
orderdate | |
paymethodheading | |
paymethod | |
shipmethodheading | |
shipmethod | |
billingdetails | |
shippingdetails | |
footer | |
content | |
ordernotes | |
ordertotals | |
Classes : | |
copyright | |
shop_table | |
orderdetails | |
pdf_table_row | |
pdf_table_row_heading | |
pdf_table_cell | |
pdf_table_cell_heading | |
ordercontent | |
pdf_table_row_odd | |
pdf_table_row_even | |
pdf_table_cell_odd | |
pdf_table_cell_even | |
barcode | |
pdfordertotals_row | |
pdfordertotals_cell |