0

I’m using the WooCommerce PDF Invoices & Packing Slips plugin by WP Overnight.

I’ve successfully:

  • Created a second custom PDF template (a voucher version without prices).
  • Added a button on the Thank You page to download that second template.

Everything appears to be set up correctly — but when I click the new button, I get this error:

Invalid Order The order ID being passed is correct (I double-checked the value and it matches the order that just completed).

What I’ve done:

Created the second template under my child theme: wp-content/themes/child-theme/woocommerce/pdf/voucher.php And registered it via filter adding a custom button on Thank you page:

add_action('woocommerce_thankyou', 'add_voucher_pdf_button', 20);
function add_voucher_pdf_button($order_id) {
 if (!$order_id) return;
 
 $order = wc_get_order($order_id);
 if (!$order) return;
 // Nonce for security, must match the document type (invoice)
 $nonce = wp_create_nonce('generate_wpo_wcpdf');
 
 // Build the correct AJAX URL
 $pdf_url = add_query_arg(array(
 'action' => 'generate_wpo_wcpdf',
 'document' => 'invoice', // keep as invoice, since voucher isn’t a registered type
 'order_ids' => $order->get_id(),
 'voucher_pdf' => 1,
 '_wpnonce' => $nonce,
 ), admin_url('admin-ajax.php'));
 
 echo '<a href="' . esc_url($pdf_url) . '" target="_blank" class="button alt" style="margin-top:20px;">Download Voucher PDF</a>';
}
add_filter('wpo_wcpdf_template_file', 'load_voucher_template_conditionally', 10, 3);
function load_voucher_template_conditionally($template, $type, $order) {
 if (!empty($_GET['voucher_pdf']) && $_GET['voucher_pdf'] == 1) {
 $voucher_template = get_stylesheet_directory() . '/woocommerce/pdf/voucher-template/' . basename($template);
 
 if (file_exists($voucher_template)) {
 return $voucher_template;
 }
 }
 return $template;
}

Any insight or example on how to do this correctly?

asked Nov 11 at 14:17

1 Answer 1

0

First you need to register your custom PDF type with WP Overnight so it’s a valid document:

add_filter( 'wpo_wcpdf_document_types', function( $document_types ) {
 $document_types['voucher'] = array(
 'title' => __( 'Voucher', 'your-textdomain' ),
 'description' => __( 'Custom voucher PDF without prices', 'your-textdomain' ),
 'template' => 'voucher.php',
 'folder' => 'woocommerce/pdf',
 'filename' => 'voucher-{order_number}.pdf',
 'attach_to_email' => false,
 'paper_size' => 'A4',
 );
 return $document_types;
});

Next, your button should pass the new document type:

add_action('woocommerce_thankyou', 'add_voucher_pdf_button', 20);
function add_voucher_pdf_button($order_id) {
 if (!$order_id) return;
 $order = wc_get_order($order_id);
 if (!$order) return;
 $nonce = wp_create_nonce('generate_wpo_wcpdf');
 $pdf_url = add_query_arg(array(
 'action' => 'generate_wpo_wcpdf',
 'document' => 'voucher', // <-- new document type
 'order_ids' => $order->get_id(),
 '_wpnonce' => $nonce,
 ), admin_url('admin-ajax.php'));
 echo '<a href="' . esc_url($pdf_url) . '" target="_blank" class="button alt" style="margin-top:20px;">Download Voucher PDF</a>';
}

Finally, place your template file here:

wp-content/themes/your-child-theme/woocommerce/pdf/voucher.php

Hope it works for you!

answered Nov 12 at 12:05
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.