-1

I'm trying to implement pagination into WC's customer order history that can be seen on the "My Account" page using woo_pagination().

https://docs.woothemes.com/document/woo_pagination/

The template file I'm trying to edit is - woocommerce/templates/myaccount/my-orders.php

By default the 15 most recent orders are shown. I have changed [woocommerce_my_account] page tag to [woocommerce_my_account order_count="all"] to display all orders instead of only the last 15.

What I'm trying to do now is add the woo_pagination function to display X orders per page so that an entire order history is available to customers in an organized way. But I'm not sure how to add it and I did not find the documentation very helpful in this case.

Here's a copy of the template I'm trying to add the pagination function to:

$my_orders_columns = apply_filters( 'woocommerce_my_account_my_orders_columns', array(
    'order-number'  => __( 'ID', 'woocommerce' ),
    'order-date'    => __( 'Date', 'woocommerce' ),
    'order-total'   => __( 'Packages', 'woocommerce' ),
    'order-total'   => __( 'Price', 'woocommerce' ),
    'order-status'  => __( 'Status', 'woocommerce' ),
    'order-actions' => ' ',
) );

$customer_orders = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
    'numberposts' => $order_count,
    'meta_key'    => '_customer_user',
    'meta_value'  => get_current_user_id(),
    'post_type'   => wc_get_order_types( 'view-orders' ),
    'post_status' => array_keys( wc_get_order_statuses() )
) ) );

if ( $customer_orders ) : ?>
    <h2><?php echo apply_filters( 'woocommerce_my_account_my_orders_title', __( 'Recent Orders', 'woocommerce' ) ); ?></h2>

    <table class="shop_table shop_table_responsive my_account_orders">
    <?php echo $customer_orders['numberposts']. '<br>test'; ?>

        <thead>
            <tr>
                <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>
                    <th class="<?php echo esc_attr( $column_id ); ?>"><span class="nobr"><?php echo esc_html( $column_name ); ?></span></th>
                <?php endforeach; ?>
            </tr>
        </thead>

        <tbody>
            <?php foreach ( $customer_orders as $customer_order ) :
                $order      = wc_get_order( $customer_order );
                $item_count = $order->get_item_count();
                ?>
                <tr class="order">
                    <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>
                        <td class="<?php echo esc_attr( $column_id ); ?>" data-title="<?php echo esc_attr( $column_name ); ?>">
                            <?php if ( has_action( 'woocommerce_my_account_my_orders_column_' . $column_id ) ) : ?>
                                <?php do_action( 'woocommerce_my_account_my_orders_column_' . $column_id, $order ); ?>

                            <?php elseif ( 'order-number' === $column_id ) : ?>
                                <a href="<?php echo esc_url( $order->get_view_order_url() ); ?>">
                                    <?php echo _x( '#', 'hash before order number', 'woocommerce' ) . $order->get_order_number(); ?>
                                </a>

                            <?php elseif ( 'order-date' === $column_id ) : ?>
                                <time datetime="<?php echo date( 'Y-m-d', strtotime( $order->order_date ) ); ?>" title="<?php echo esc_attr( strtotime( $order->order_date ) ); ?>"><?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?></time>

                            <?php elseif ( 'order-status' === $column_id ) : ?>
                                <?php echo wc_get_order_status_name( $order->get_status() ); ?>

                            <?php elseif ( 'order-total' === $column_id ) : ?>
                                <?php echo sprintf( _n( '%s for %s item', '%s for %s items', $item_count, 'woocommerce' ), $order->get_formatted_order_total(), $item_count ); ?>

                            <?php elseif ( 'order-actions' === $column_id ) : ?>
                                <?php
                                    $actions = array(
                                        'pay'    => array(
                                            'url'  => $order->get_checkout_payment_url(),
                                            'name' => __( 'Pay', 'woocommerce' )
                                        ),
                                        'view'   => array(
                                            'url'  => $order->get_view_order_url(),
                                            'name' => __( 'View', 'woocommerce' )
                                        ),
                                        'cancel' => array(
                                            'url'  => $order->get_cancel_order_url( wc_get_page_permalink( 'myaccount' ) ),
                                            'name' => __( 'Cancel', 'woocommerce' )
                                        )
                                    );

                                    if ( ! $order->needs_payment() ) {
                                        unset( $actions['pay'] );
                                    }

                                    if ( ! in_array( $order->get_status(), apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( 'pending', 'failed' ), $order ) ) ) {
                                        unset( $actions['cancel'] );
                                    }

                                    if ( $actions = apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order ) ) {
                                        foreach ( $actions as $key => $action ) {
                                            echo '<a href="' . esc_url( $action['url'] ) . '" class="button ' . sanitize_html_class( $key ) . '">' . esc_html( $action['name'] ) . '</a>';
                                        }
                                    }
                                ?> 
                            <?php endif; ?>
                        </td>
                    <?php endforeach; ?>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
<?php endif; ?>

I tried adding the pagination function after:

</tr>
<?php endforeach; ?>

but it did not work. Any help or suggestions would be greatly appreciated.

  • Really, no ideas? – nickyb Feb 19 '16 at 2:35
0

I have added pagination in order history page and it is working. Replace below code above loop

$my_orders_columns = apply_filters( 'woocommerce_my_account_my_orders_columns', array( 'order-number' => __( 'ID', 'woocommerce' ), 'order-date' => __( 'Date', 'woocommerce' ), 'order-total' => __( 'Packages', 'woocommerce' ), 'order-total' => __( 'Price', 'woocommerce' ), 'order-status' => __( 'Status', 'woocommerce' ), 'order-actions' => '&nbsp;', ) ) $customer_orders1 = get_posts(apply_filters('woocommerce_my_account_my_orders_query', array( 'numberposts' => -1, 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => wc_get_order_types('view-orders'), 'post_status' => array_keys(wc_get_order_statuses()) ))); $total_records = count($customer_orders1); $posts_per_page = 20; $total_pages = ceil($total_records / $posts_per_page); $paged = ( get_query_var('page') ) ? get_query_var('page') : 1; $customer_orders = get_posts(array( 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => wc_get_order_types('view-orders'), 'posts_per_page' => $posts_per_page, 'paged' => $paged, 'post_status' => array_keys(wc_get_order_statuses()) ));

and after loop completed add pagination

<div class="pagination"> <?php $args = array( 'base' => '%_%', 'format' => '?page=%#%', 'total' => $total_pages, 'current' => $paged, 'show_all' => False, 'end_size' => 5, 'mid_size' => 5, 'prev_next' => True, 'prev_text' => __('&laquo; Previous'), 'next_text' => __('Next &raquo;'), 'type' => 'plain', 'add_args' => False, 'add_fragment' => '' ); echo paginate_links($args); ?> </div>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.