我有几个自定义表,可用于与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' => __('«'),
'next_text' => __('»'),
'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");