-1

I've been trying to add a pagination using woo_pagination in My Account>Orders page.

I also tried this solution in this post pagination in woocommerce order history page but its not working.

I am using WC 2.6

This is the code from orders.php since my-orders.php is deprecated in WC 2.6

<table class="woocommerce-MyAccount-orders shop_table shop_table_responsive my_account_orders account-orders-table">
    <thead>
        <tr>
            <?php foreach ( wc_get_account_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->orders as $customer_order ) :
            $order      = wc_get_order( $customer_order );
            $item_count = $order->get_item_count();
            ?>
            <tr class="order">
                <?php foreach ( wc_get_account_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 do_action( 'woocommerce_before_account_orders_pagination' ); ?>

<?php if ( 1 < $customer_orders->max_num_pages ) : ?>
    <div class="woocommerce-Pagination">
        <?php if ( 1 !== $current_page ) : ?>
            <a class="woocommerce-Button woocommerce-Button--previous button" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page - 1 ) ); ?>"><?php _e( 'Previous', 'woocommerce' ); ?></a>
        <?php endif; ?>

        <?php if ( $current_page !== intval( $customer_orders->max_num_pages ) ) : ?>
            <a class="woocommerce-Button woocommerce-Button--next button" href="<?php echo esc_url( wc_get_endpoint_url( 'orders', $current_page + 1 ) ); ?>"><?php _e( 'Next', 'woocommerce' ); ?></a>
        <?php endif; ?>
    </div>
<?php endif; ?>
">
  • Please provide us the related code for your My Account>Orders page and my suggestion is to use WC 3.0.0+, cause it has some major bug fix and update. – CodeMascot May 22 '17 at 16:48
  • Added orders.php code in OP – Volt May 22 '17 at 17:05
  • I can't use WC 3.0 cause of theme incompatibility. – Volt May 26 '17 at 21:55
  • Does my question has an answer or not? – Volt May 29 '17 at 19:41
  • Look @Jorge, here no people are bound to answer questions. So I think next time a more polite approach(or tone) will be better. And also here we all are professional, we contribute in our free time. Anyway, give sometime more I'll try to solve your problem as well as other people will get chance to answer your problem too. – CodeMascot May 29 '17 at 20:01
0

OK. As far as I researched the WooCommerce provides default pagination for orders in My Account page. See this GitHub issue here. And also see, there is a hook declared at my-orders.php in your code called woocommerce_before_account_orders_pagination by doing

<?php do_action( 'woocommerce_before_account_orders_pagination' ); ?>

So WooCommerce provides default pagination. You better use it. May be it'll be paginated after the orders number is greater than 15.

Anyway if this thing does not work then you can see this post. This guy says he made it worked with the pagination. Though I'm not sure if this thing work or not cause I haven't tried it, its worth a try for yourself.

Hope the above answer helps.

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.