Me llevó algo de tiempo pero, mirando con la mente más relajada, pude encontrar la solución al problema. Dejo la solución a continuación para quien la necesite.
Lo primero que hice fue leer la referencia de wordpress en paginate_links: https://developer.wordpress.org/reference/functions/paginate_links/
Mirando los diversos ejemplos disponibles en la referencia, entendí que algo andaba mal con el $current_page = ( get_query_var('paged') ? get_query_var('paged') : 1;. Probablemente lo estaba aplicando mal. Hice varias pruebas siguiendo la referencia pero no tuve éxito, así que fui a buscar otras publicaciones aquí en stackoverflow para comprender mejor cómo se usa la variable $paged (que en mi caso llamé $current_page).
Después de mi investigación, encontré esta publicación que me llevó a la solución final: https://wordpress.stackexchange.com/questions/275527/paginate-links-ignore-my-format
Esto me ayudó ya que en realidad la paginación estaba ignorando mis enlaces porque cuando hice clic allí no redirigió, sino que actualizó la página actual cada vez.
Esto es lo que hice para resolver el problema.:
Cambié
$current_page = ( get_query_var('paged') ) ? get_query_var('paged') : 1;a$current_page = max( 1, (int) filter_input( INPUT_GET, 'pagina' ) );Luego también cambié el valor de formato en la matriz de paginación
'format' => '?pagina=%#%',
Tenga en cuenta que ‘página’ se ha filtrado para filter_input( INPUT_GET, 'pagina') de lo contrario, la paginación no funcionará.
Así es como se ve mi plantilla de punto final personalizada
<?php
?><div class="orders-container"><?php
defined( 'ABSPATH' ) || exit;
$downloads = WC()->customer->get_downloadable_products();
$has_downloads = (bool) $downloads;
do_action( 'woocommerce_before_account_downloads', $has_downloads );
if ( $has_downloads ) {
?><table class="table_orders heading"><tr>
<td class="product_number">Ordine</td>
<td class="product_name">Prodotto</td>
<td class="product_data">Data</td>
<td class="product_price">Totale</td>
<td class="product_status">Stato</td>
<td class="product_action">File</td>
</tr></table><?php
$order_statuses = array('wc-completed');
$paged = max( 1, (int) filter_input( INPUT_GET, 'pagina' ) );
$args = apply_filters('woocommerce_my_account_my_orders_query',array(
'customer_id' => get_current_user_id(),
'post_status' => $order_statuses,
'paged' => $paged,
'posts_per_page' => 3,
'paginate' => true,
));
$customer_orders = wc_get_orders( $args );
// Get Access $order variable Foreach - Definisci le variabili sotto per poi utilizzarle in echo
foreach($customer_orders->orders as $order) {
// Get $product object from $order / $order_id
$orders_id = $order->get_id();
$status = wc_get_order_status_name( $order->get_status() );
$date_created = $order->get_date_created()->date('d/m/Y');
$payment_method = $order->get_payment_method_title();
$order_total = $order->get_formatted_order_total();
// Get Access Items & Product Variable Foreach
foreach($order->get_items() as $item_id => $item) {
$product_name = $item->get_name();
$view_order = $order->get_view_order_url();
// Get product image - https://www.businessbloomer.com/woocommerce-easily-get-product-info-title-sku-desc-product-object/
$product = $item->get_product();
if( $product instanceof WC_Product ){
$order_img = $product->get_image();
}
//Get product download button
$downloads = $order->get_downloadable_items();
if(is_array($downloads)) {
foreach($downloads as $product){
$download_button = '<a href="'. $product['download_url'] .'" target="_blank">Download</a>';
}
}
echo '
<table class="table_orders">
<tr class="table_row_items">
<td class="product_number">
<span class="mobile title">Ordine</span>
<span>#'. esc_attr($orders_id) .'</span>
</td>
<td class="product_name">
<span class="mobile title">Prodotto</span>
<a href="'. wp_kses_post($view_order) .'">'. wp_kses_post($product_name) .'</a>
</td>
<td class="product_data">
<span class="mobile title">Data</span>
<span>'. wp_kses_post($date_created) .'</span>
</td>
<td class="product_price">
<span class="mobile title">Prezzo</span>
<span>'. wp_kses_post($order_total) .'</span>
</td>
<td class="product_status">
<span class="mobile title">Stato</span>
<span class="label ' . $order->get_status() . '">'. wp_kses_post($status) .'</span>
</td>
<td class="product_action">
<span class="mobile title">File</span>
<a target=”_blank” href="'. esc_url($view_order) .'">Visualizza<i class="fa-duotone fa-eye"></i></a>
</td>
</tr>
</table>
';
// Tasto download funzionante - if($downloads) { echo '<div class="container_orders_download"> '. $download_button .' </div>'; }
}
}
// Pagination button - Responsabile dei bottoni e numerazione delle pagine della cronologia ordini
?><div class="container-pagination"><?php
$args = array(
'base' => esc_url( wc_get_endpoint_url( 'libreria') ) . '%_%',
'format' => '?pagina=%#%',
'total' => $customer_orders->max_num_pages,
'current' => $paged,
'show_all' => false,
'end_size' => 3,
'mid_size' => 3,
'prev_next' => true,
'prev_text' => __('<i class="fa-regular fa-angle-left"></i><span>Indietro</span>'),
'next_text' => __('<span>Avanti</span><i class="fa-regular fa-angle-right"></i>'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
echo paginate_links($args);
}
else {
?><div class="msg_orders">La tua cronologia ordini è vuota!</div><?php
}
?></div><?php
do_action( 'woocommerce_after_account_downloads', $has_downloads );
?>
</div>
.