Невозможно отобразить таблицу mysql wpdb с информацией о продуктах woocommerce БЕЗ строк, содержащих удаленные продукты;также не может разбить таблицу на HTML - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь: 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 dashboard и, таким образом, у них больше нет product_id?

product_id IS NOT NULL AND product_id <>

или просто

product_id IS NOT NULL

не похоже на работу.Он по-прежнему отображает пустые строки для продуктов, которые были ранее удалены.

2) Что касается нумерации таблиц, я хочу отобразить 20 строк на странице с кнопками Next / Previous, но мой код некажется, работает, и у меня нет идей.

1 Ответ

0 голосов
/ 02 октября 2018

Почему бы вам не попробовать использовать встроенные в 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

...