我正在尝试:1)显示 mysql wpdb 表中的所有记录,但不显示已废弃的产品,2)对 html 表进行分页。
我搜索过其他问题并尝试了这些回答的方法,但到目前为止没有任何效果。
这是我的代码(带有 html 表格的简化版本,用于示例)
<?php
$page = (isset($_GET['page'])) ? $_GET['page'] : 1;
$startrow = $page - 1;
$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
" );
if ( sizeof( $records) > 0 ) {
<table>
<thead>
<tr>
<th><?php echo 'Date' ?></th>
<th><?php echo 'Product' ?></th>
<th><?php echo 'Order' ?></th>
</tr>
</thead>
<tbody>
<?php $i = 1;
foreach ( $records as $row ) :
$i++; ?>
<tr>
<td><?php echo $date ?></td>
<td><?php echo $product ?></td>
<td><?php echo $order ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php echo '<a href="'.$_SERVER['PHP_SELF'].'?startrow=' ($startrow+20).'">Next</a>';
$prev = $startrow - 20;
if ($prev >= 0) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?startrow='.$prev.'">Previous</a>';}?>
问题:
1) 如何跳过之前已从 wp 仪表板中永久删除的产品行,因此它们不再具有 Product_id?
product_id IS NOT NULL AND product_id <>
或者只是
product_id IS NOT NULL
似乎不起作用。对于之前已删除的产品,它仍然显示空白行。
2)至于表格的分页,我想每页显示20行,带有下一个/上一个按钮,但我的代码似乎不太有效,我没有主意。
最佳答案
为什么不尝试使用 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>
关于php - 无法显示 mysql wpdb 表,其中包含有关 woocommerce 产品的信息,但没有包含已删除产品的行;也无法对 html 表进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610265/