Tengo un ciclo personalizado con wp_query, esta es una tabla que muestra los pedidos realizados por un usuario. Todo funciona bien, el contenido que se muestra, la paginación y los datos están bien.
Para probar, estoy mostrando 4 resultados por página, lo que estoy tratando de hacer es cargar dinámicamente otros resultados con paginación ajax. Quiero que cuando haga clic en la página 2 se carguen otras 4 publicaciones en lugar de cargar otra página.
Ahora la llamada ajax parece funcionar, cuando hago clic en la página 2 se carga correctamente, pero como resultado obtengo 0 en lugar de cargar otras publicaciones. Por qué está pasando esto ?
Plantilla.php
<script src="https://mywebsite.com/wp-content/themes/astra-child/woocommerce/myaccount/assets/main.js?<?php $FourDigitRandomNumber = mt_rand(00000,99999); echo $FourDigitRandomNumber; ?>" defer=""></script>
<h3>Custom Endpoint</h3>
<div id="content">
<?php
global $wp_query;
$paged = max( 1, (int) filter_input( INPUT_GET, 'pagina' ) );
$order_statuses = array('wc-completed');
$args = array(
'post_type' => 'shop_order',
'paged' => $paged,
'posts_per_page' => 4,
'post_status' => $order_statuses,
'customer_id' => get_current_user_id(),
);
$loop = new WP_Query( $args );
$post_count = $loop->found_posts;
// The WordPress post loop
if( $loop->have_posts() ) {
while( $loop->have_posts() ) {
$loop->the_post();
// The order ID
$order_id = $loop->post->ID;
// Get an instance of the WC_Order Object
$order = wc_get_order($loop->post->ID);
$items = $order->get_items();
$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();
foreach ( $items as $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>
';
}
}
}
// Pagination
if ( $post_count > 4 ) {
?><div id="pagination" class="container-pagination"><?php
$args = array(
'base' => esc_url( 'https://motustrength.it/account/custom/' ) . '%_%',
'format' => '?pagina=%#%',
'total' => $loop->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="no-downloads-msg">Nessun download disponibile, non hai ancora acquistato alcun prodotto.</div><?php
}
?></div><?php
Archivo Js
(function( $ ) {
$.fn.wpPagination = function( options ) {
options = $.extend({
links: "a",
action: "pagination",
ajaxURL: "https://" + location.host + "/wp-admin/admin-ajax.php",
next: ".next"
}, options);
function WPPagination( element ) {
this.$el = $( element );
this.init();
}
WPPagination.prototype = {
init: function() {
this.createLoader();
this.createEnd();
this.handleNext();
this.handleLinks();
},
createLoader: function() {
var self = this;
$('#pagination').prepend( "<span id='pagination-loader'>Loading...</span>" );
$('#pagination-loader').hide();
},
createEnd: function() {
var self = this;
$('#pagination').prepend( "<span id='pagination-end'>End</span>" );
$('#pagination-end').hide();
},
handleNext: function() {
var self = this;
var $next = $( options.next, self.$el );
},
handleLinks: function() {
var self = this,
$links = $( options.links, self.$el ),
$pagination = $( "#pagination" );
$loader = $( "#pagination-loader" );
$end = $( "#pagination-end" );
$links.click(function( e ) {
e.preventDefault();
$('#pagination .next').fadeOut();
$loader.fadeIn();
var $a = $( this ),
url = $a.attr("href"),
page = url.match( /d+/ ),
pageNumber = page[0],
data = {
action: options.action,
page: pageNumber,
shop_order: $('#pagination-post-type').text()
};
$.get( options.ajaxURL, data, function( html ) {
$pagination.before( "<div id='page-" + pageNumber + "'></div>" );
$pagination.before( html );
$a.attr("href", url.replace("https://stackoverflow.com/" + pageNumber + "https://stackoverflow.com/", "https://stackoverflow.com/" + ( parseInt(pageNumber) + 1 ) + "https://stackoverflow.com/"));
if ( !html ) {
$('#pagination .next').remove();
$loader.fadeOut();
$end.fadeIn();
} else {
$loader.fadeOut();
$('#pagination .next').fadeIn();
//smoothScroll($('#page-' + pageNumber), 85);
}
});
});
}
};
return this.each(function() {
var element = this;
var pagination = new WPPagination( element );
});
};
$(function() {
if( $( "#pagination" ).length ) {
$( "#pagination" ).wpPagination();
}
});
})( jQuery );
Funciones.php
// ajax pag
function get_posts_for_pagination() {
$html="";
$paged = ( $_GET['page'] ) ? $_GET['page'] : 1;
$post_type = $_GET['shop_order'];
if ( empty($post_type) ) {
return '';
}
if( filter_var( intval( $paged ), FILTER_VALIDATE_INT ) ) {
$paged = max( 1, (int) filter_input( INPUT_GET, 'pagina' ) );
$order_statuses = array('wc-completed');
$args = array(
'post_type' => 'shop_order',
'paged' => $paged,
'posts_per_page' => 4,
'post_status' => $order_statuses,
'customer_id' => get_current_user_id(),
);
$loop = new WP_Query( $args );
$post_count = $loop->found_posts;
// The WordPress post loop
if( $loop->have_posts() ) {
while( $loop->have_posts() ) {
$loop->the_post();
// The order ID
$order_id = $loop->post->ID;
// Get an instance of the WC_Order Object
$order = wc_get_order($loop->post->ID);
$items = $order->get_items();
$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();
foreach ( $items as $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>
';
}
} wp_reset_query();
}
}
echo $html;
exit();
}
add_action( 'wp_ajax_pagination', 'get_posts_for_pagination' );
add_action( 'wp_ajax_nopriv_pagination', 'get_posts_for_pagination' );
.