我有几个自定义表,可用于与Wordpress本身无关的各种信息。例如,我有一个用于某些图像的自定义表。

自定义表如下:

id(int11)img_link(text)img_desc(text)img_wk(text)img_wishtype(text)img_dateadded(datetime)

该表最终将有数百行,我想实现分页。我不确定是否可以:


如何使用WP_Query做到这一点并包括分页
如果无法使用WP_Query,如何将结果分页显示为每页20条?


以下是我尝试并失败的代码。我看过其他几个类似的问题,但大多数问题都使用了后置类型。很好,我只是不知道如何声明后置类型或它们将如何与我的自定义表重合。

global $wpdb;
$per_page = 5;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
if ($page > 1) {
    $offset = $page * $per_page - $per_page;
} else {
    $offset = $page;
}
$the_post = "SELECT img_link,img_wk FROM custom_table ORDER BY id DESC LIMIT $per_page offset $offset";
$details = $wpdb->get_results($the_post, ARRAY_A);
//do foreach to display your post details.
print_r($details);
echo '<br>';
$output = '';
foreach($details as $livewish){
    $output .= $livewish['img_link'].'======'.$livewish['img_wk'].'<br>';
}


$total = $wpdb->get_var("SELECT img_link FROM custom_table ORDER BY id DESC");
$output .= paginate_links(array(
    'base' => add_query_arg('cpage', '%#%'),
    'format' => '',
    'prev_text' => __('&laquo;'),
    'next_text' => __('&raquo;'),
    'total' => ceil($total / $per_page),
    'current' => $page
));


上面的代码并没有真正起作用。由于某种原因,当我有两行用于测试时,它仅输出一行。我确实注意到,如果将ARRAY_A更改为OBJECT,则分页部分有效,但是SQL中断了。当我将其更改回ARRAY_A时,我只会得到一行结果,而应该有两行。

最佳答案

我认为重写查询如下就足够了。

$limit = $wpdb->prepare("LIMIT %d, %d", $per_page, $offset); // I'd use the builtin method to escape untrusted values.
$the_post = "SELECT img_link,img_wk FROM custom_table ORDER BY id DESC LIMIT {$limit}"; // And then just concatenating parts...
$details = $wpdb->get_results($the_post, ARRAY_A);


如果将OBJECT作为第二个参数传递,则查询将返回行作为对象。因此,您需要按以下方式访问您的值-

foreach($details as $livewish){
    $output .= $livewish->img_link . '======' . $livewish->img_wk.'<br>';
}


而且我认为您在计算total错误。这应该是-

$total = $wpdb->get_var("SELECT COUNT(*) FROM custom_table");

10-05 21:34