Почему бы вам не попробовать использовать встроенные в WordPress функции запросов / классы типа get_posts()
или WP_Query()
?
Например, вместо:
$records = $wpdb->get_results( "
SELECT * FROM {$wpdb->prefix}table_name LIMIT $startrow, 20
WHERE product_id IS NOT NULL AND product_id <> ''
ORDER BY time DESC
" );
Сделайте это:
$args = array(
'post_type' => 'product',
'posts_per_page' => 20,
'status' => 'publish',
'paged' => $paged
);
$loop = new WP_Query( $args );
Это даст вам все активные продукты без удаляемых.
Для разбивки на страницы обязательно объявите переменную $ paged перед разделом аргументов выше:
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
И также добавьте этот код под таблицей:
<nav>
<ul>
<li><?php previous_posts_link( '« PREV', $loop->max_num_pages) ?></li>
<li><?php next_posts_link( 'NEXT »', $loop->max_num_pages) ?></li>
</ul>
</nav>
Завершенный код должен выглядетькак это:
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$args = array(
'post_type' => 'product',
'posts_per_page' => 20,
'status' => 'publish',
'paged' => $paged
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
<table>
<thead>
<tr>
<th><?php echo 'Date' ?></th>
<th><?php echo 'Product' ?></th>
<th><?php echo 'Order' ?></th>
</tr>
</thead>
<tbody>
<?php while ( $loop->have_posts() ) : $loop->the_post();?>
<tr>
<td><?php echo $date ?></td>
<td><?php echo $product ?></td>
<td><?php echo $order ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
}
<nav>
<ul>
<li><?php previous_posts_link( '« PREV', $loop->max_num_pages) ?></li>
<li><?php next_posts_link( 'NEXT »', $loop->max_num_pages) ?></li>
</ul>
</nav>
Ссылка: https://stackoverflow.com/a/37305160/10446647