我想知道如何在get_posts循环之外获得自定义帖子或其页面的偏移量。
我开发了一个外部web应用程序,该应用程序使用JSON API插件连接到wordpress博客,并使用AJAX请求显示给定的帖子页面,如:
?json=get_posts&orderby=date&order=desc&count=x&page=n
(这将返回x个帖子的第n页)
这很好,但现在我想在wordpress博客"single post"页面上设置一个链接到这个应用程序,比如"在应用程序中显示这个帖子",并将当前页面偏移量作为参数。因此,我将能够在应用程序中读取此参数,并获取包含帖子的页面的帖子,并突出显示此帖子(作为参数发送)。
如果我能得到偏移量,我将能够用模运算符显示右侧页面:
如果偏移量=22,计数=10,则显示第3页并突出显示第2个后
page = Math.ceil(offset / count);
post_to_highlight_position = offset % count;
你知道我该怎么做吗?或者是否有更好的方法来实现这一点?
经过一些研究,我终于找到了一种使用自定义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
最后一步,我根据post 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获得偏移量,但您可以只使用offset
从1获得偏移量。
因此,这将返回以下表格:
id=83,每页帖子=10:
ID | offset | page | position
83 | 16 | 2 | 6
->第2页第6位
id=10,每页帖子=5:
ID | offset | page | position
10 | 33 | 7 | 3
->第7页第3个位置