做了一些研究後,我終於找到了一種方法來做到這一點與自定義SQL查詢。 這是我如何實現這一點:
首先,我加入這個代碼WP_QUERY生成的SQL查詢:
$query = new WP_Query($query_args);
//write the SQL query
echo $query->request;
我有一樣的東西:
SELECT wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'work'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
它返回完整帖子列表,由最新的第一個排序。然後,我通過簡單的聲明位移變量,並增加它的每一行中,這樣增加了offset
:
SET @offset=0;
SELECT wp_posts.ID,
@offset := @offset + 1 AS offset
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'work'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
最後一步,我過濾的ID名單+郵寄ID偏移協會和添加自定義行(page
和position
):
SET @offset=0;
SELECT ID,
offset - 1 AS offset,
CEIL(offset/10) AS page,
(offset - 1) % 10 AS position
FROM (SELECT wp_posts.ID,
@offset := @offset + 1 AS offset
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'work'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC)
AS OFFSETS
WHERE ID = 83
(其中83搜索帖子ID和每頁顯示10個)
我以前offset - 1 AS offset
從0獲得補償,但你可以只使用的數從1得到偏移量。
因此,這將返回如下表:
ID = 83,每頁帖= 10:
ID | offset | page | position
83 | 16 | 2 | 6
- 第2頁
ID上>第6位= 10,每頁帖子= 5:
ID | offset | page | position
10 | 33 | 7 | 3
- >第7頁的第3位