php - 无法显示 mysql wpdb 表,其中包含有关 woocommerce 产品的信息,但没有包含已删除产品的行;也无法对 html 表进行分页

标签 php mysql wordpress html-table pagination

我正在尝试: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( '&laquo; PREV', $loop->max_num_pages) ?></li> 
        <li><?php next_posts_link( 'NEXT &raquo;', $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( '&laquo; PREV', $loop->max_num_pages) ?></li> 
        <li><?php next_posts_link( 'NEXT &raquo;', $loop->max_num_pages) ?></li>
    </ul>
</nav>

引用:https://stackoverflow.com/a/37305160/10446647

关于php - 无法显示 mysql wpdb 表,其中包含有关 woocommerce 产品的信息,但没有包含已删除产品的行;也无法对 html 表进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610265/

相关文章:

php - 其他人账户的 Paypal IPN,需要扣除费用

php - 将内容添加到 WooCommerce 我的帐户仪表板主页部分

mysql - Solr 索引我的 SQL 时间戳或日期时间字段

iOS Swift 3 发布问题

mysql - 尝试导出数据库并在导入时减少表的数量

php - 如果存在某些值,则 mysql 更新,否则创建一个新条目

phpMyAdmin - 缺少 MySQL 扩展

jquery - 悬停在 js 生成的类/元素上不起作用

wordpress - 如何在现有 WordPress git 存储库中配置新的 docker-compose.yml 文件?

css - 从 Wordpress 中的按钮中删除样式