-
-
Save mikejolley/1339240 to your computer and use it in GitHub Desktop.
<?php | |
/* | |
Template Name: Print Processing Orders :) | |
*/ | |
if (!is_user_logged_in() || !current_user_can('manage_options')) wp_die('This page is private.'); | |
?> | |
<!DOCTYPE HTML> | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
<title><?php _e('Processing Orders'); ?></title> | |
<style> | |
body { background:white; color:black; width: 95%; margin: 0 auto; } | |
table { border: 1px solid #000; width: 100%; } | |
table td, table th { border: 1px solid #000; padding: 6px; } | |
article { border-top: 2px dashed #000; padding: 20px 0; } | |
</style> | |
</head> | |
<body> | |
<header> | |
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> | |
<h1 class="title"><?php the_title(); ?></h1> | |
<?php the_content(); ?> | |
<?php endwhile; endif; ?> | |
</header> | |
<section> | |
<?php | |
global $woocommerce; | |
$args = array( | |
'post_type' => 'shop_order', | |
'post_status' => 'publish', | |
'posts_per_page' => -1, | |
'tax_query' => array( | |
array( | |
'taxonomy' => 'shop_order_status', | |
'field' => 'slug', | |
'terms' => array('processing') | |
) | |
) | |
); | |
$loop = new WP_Query( $args ); | |
while ( $loop->have_posts() ) : $loop->the_post(); | |
$order_id = $loop->post->ID; | |
$order = new WC_Order($order_id); | |
?> | |
<article> | |
<header> | |
<h2>Order #<?php echo $order_id; ?> — <time datetime="<?php the_time('c'); ?>"><?php echo the_time('d/m/Y'); ?></time></h2> | |
</header> | |
<table cellspacing="0" cellpadding="2"> | |
<thead> | |
<tr> | |
<th scope="col" style="text-align:left;"><?php _e('Product', 'woothemes'); ?></th> | |
<th scope="col" style="text-align:left;"><?php _e('Quantity', 'woothemes'); ?></th> | |
<th scope="col" style="text-align:left;"><?php _e('Price', 'woothemes'); ?></th> | |
</tr> | |
</thead> | |
<tfoot> | |
<tr> | |
<th scope="row" colspan="2" style="text-align:left; padding-top: 12px;"><?php _e('Subtotal:', 'woothemes'); ?></th> | |
<td style="text-align:left; padding-top: 12px;"><?php echo $order->get_subtotal_to_display(); ?></td> | |
</tr> | |
<?php if ($order->order_shipping > 0) : ?><tr> | |
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Shipping:', 'woothemes'); ?></th> | |
<td style="text-align:left;"><?php echo $order->get_shipping_to_display(); ?></td> | |
</tr><?php endif; ?> | |
<?php if ($order->order_discount > 0) : ?><tr> | |
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Discount:', 'woothemes'); ?></th> | |
<td style="text-align:left;"><?php echo woocommerce_price($order->order_discount); ?></td> | |
</tr><?php endif; ?> | |
<?php if ($order->get_total_tax() > 0) : ?><tr> | |
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Tax:', 'woothemes'); ?></th> | |
<td style="text-align:left;"><?php echo woocommerce_price($order->get_total_tax()); ?></td> | |
</tr><?php endif; ?> | |
<tr> | |
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Total:', 'woothemes'); ?></th> | |
<td style="text-align:left;"><?php echo woocommerce_price($order->order_total); ?> <?php _e('- via', 'woothemes'); ?> <?php echo ucwords($order->payment_method); ?></td> | |
</tr> | |
</tfoot> | |
<tbody> | |
<?php echo $order->email_order_items_table(); ?> | |
</tbody> | |
</table> | |
<h2><?php _e('Customer details', 'woothemes'); ?></h2> | |
<?php if ($order->billing_email) : ?> | |
<p><strong><?php _e('Email:', 'woothemes'); ?></strong> <?php echo $order->billing_email; ?></p> | |
<?php endif; ?> | |
<?php if ($order->billing_phone) : ?> | |
<p><strong><?php _e('Tel:', 'woothemes'); ?></strong> <?php echo $order->billing_phone; ?></p> | |
<?php endif; ?> | |
<div style="float:left; width: 49%;"> | |
<h3><?php _e('Billing address', 'woothemes'); ?></h3> | |
<p> | |
<?php echo $order->get_formatted_billing_address(); ?> | |
</p> | |
</div> | |
<div style="float:right; width: 49%;"> | |
<h3><?php _e('Shipping address', 'woothemes'); ?></h3> | |
<p> | |
<?php echo $order->get_formatted_shipping_address(); ?> | |
</p> | |
</div> | |
<div style="clear:both;"></div> | |
</article> | |
<?php endwhile; ?> | |
</section> | |
</body> | |
</html> |
This is very cool Mike. Thanks for creating this.
I am hopeful that you or someone else could tell me how to make the page show all orders for a specific product and also, make it easy for someone to query different products via id or name on the page and have it generate the report.
Thanks again!
It there a way of making it print from just a specific category? Or actually instead I would want to exclude two specific product categories :)
thanks in advance!
Niki
Hey @nikicampbell,
Did you ever figure out how to print from just a specific category (or to exclude categories)? That's exactly what I'm looking for and haven't been able to get it to work. I found this:
http://wpquestions.com/question/showChrono/id/8301
But it doesn't work. :(
Thanks,
Scott
Hello handy code, thanks,
Is there a simple way of printing a list of just the marked orders (i.e. ones which have been manually checked in the checkbox on the admin orders page)?
All I really require is a simple printed list of the checked orders, with order numbers and order total, plus total of the totals .
Any plugins to achieve this?
Cheers Duncan
@nikicampbell & @scottmcculloch
This is not fast or a great way to iterate through the categories but this will print after a slower loading time:
'shop_order', 'post_status' => 'publish', 'orderby' => 'post_date', 'order' => 'DESC', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array( 'processing'), ), ``` ), ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); //echo '' . print_r($post, true) . ''; $order_id = $loop->post->ID; $order = new WC_Order($order_id); $items = $order->get_items(); foreach ($items as $key => $value) { $id = $value['product_id']; $terms = get_the_terms( $id, 'product_cat' ); //echo '
' . print_r($terms, true) . ''; foreach ($terms as $term) { if( $term->slug == 'YOUR-PRODUCT-CATEGORY-SLUG' ){ $product-category = true; break 2; } else { //echo 'NO' . '
'; } } } if ($product-category ) : ?>
<article>
<header>
<h2>Order #<?php echo $order_id; ?> — <time datetime="<?php the_time('c'); ?>"><?php echo the_time('M - d/Y'); ?></time></h2>
</header>
<table cellspacing="0" cellpadding="2">
<thead>
<tr>
<th scope="col" style="text-align:left;"><?php _e('Product', 'woothemes'); ?></th>
<th scope="col" style="text-align:left;"><?php _e('Quantity', 'woothemes'); ?></th>
<th scope="col" style="text-align:left;"><?php _e('Price', 'woothemes'); ?></th>
</tr>
</thead>
<tfoot>
<tr>
<th scope="row" colspan="2" style="text-align:left; padding-top: 12px;"><?php _e('Subtotal:', 'woothemes'); ?></th>
<td style="text-align:left; padding-top: 12px;"><?php echo $order->get_subtotal_to_display(); ?></td>
</tr>
<?php if ($order->order_shipping > 0) : ?><tr>
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Shipping:', 'woothemes'); ?></th>
<td style="text-align:left;"><?php echo $order->get_shipping_to_display(); ?></td>
</tr><?php endif; ?>
<?php if ($order->order_discount > 0) : ?><tr>
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Discount:', 'woothemes'); ?></th>
<td style="text-align:left;"><?php echo woocommerce_price($order->order_discount); ?></td>
</tr><?php endif; ?>
<?php if ($order->get_total_tax() > 0) : ?><tr>
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Tax:', 'woothemes'); ?></th>
<td style="text-align:left;"><?php echo woocommerce_price($order->get_total_tax()); ?></td>
</tr><?php endif; ?>
<tr>
<th scope="row" colspan="2" style="text-align:left;"><?php _e('Total:', 'woothemes'); ?></th>
<td style="text-align:left;"><?php echo woocommerce_price($order->order_total); ?> <?php _e('- via', 'woothemes'); ?> <?php echo ucwords($order->payment_method); ?></td>
</tr>
</tfoot>
<tbody>
<?php echo $order->email_order_items_table(); ?>
</tbody>
</table>
</article>
<?php else : ?>
<?php endwhile; ?>
After updating to woocommerce 3.03, this is now broken :(
It needs to be updated according to the new CRUD classes.
I have no idea how to do this :( Can anyone assist?
Thanks
The original code set $args for WP_Query() call using the following code:
$args = array( 'post_type' => 'shop_order', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array('processing') ) ) );
However, after upgrading WooCommerce to version 3.0.4, if you look in database in wp_posts table, you will notice that WooCommerce has added a "wc-" prefix to the values of the post_status field. So the values in the post_status field are now, for example:
- wc-cancelled
- wc-completed
- wc-refunded
- wc-processing
In addition, the taxonomy query (tax_query) no longer appears to be necessary, at least for my purposes. WooCommerce documentation still lists shop_order_status as a valid taxonomy, but my query no longer works when I include it.
So my revised $args statement looks like the following:
$args = array( 'post_type' => 'shop_order', 'post_status' => 'wc-processing', 'posts_per_page' => -1 );
Hope this helps!
@jnasevich - thanks for catching that! I was pulling my hair out for two days. Can't believe I looked over something so simple :P
I still cannot get this to work. Can someone post the entire revised code. I must be missing something simple. I'm not a coder, so what may be obvious to a coder, is slipping right past me.
Woocommerce changed
This works
global $woocommerce;
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-processing',
'posts_per_page' => -1,
);
$loop = new WP_Query( $args );
if($loop->have_posts()) :
while ( $loop->have_posts() ) : $loop->the_post();
$order_id = $loop->post->ID;
$order = new WC_Order($order_id);
echo $order->get_formatted_billing_address();
echo $order->get_formatted_shipping_address();
endwhile;
else :
echo "Nothing found";
endif;
Does anyone have a working copy of this page template? I am trying to get it to work with the current version of woocommerce. Thanks!
this is a core shopify feature that comes easily to shopify users. At version 4.0.0 it's still not integrated with WooCommerce? Sad
How can I make this display custom meta info for products on it? I know the meta fields names, but I don't know how to make them display for that order. Also it needs to divide the total for a product if there is more than 1 QTY. For example, it says QTY 2 = $114
It will need to also show (per piece price) which would be $57
And the Item (SKU) Number needs to be displayed.
A lot I know, But I will be very grateful if someone could help me with this.