我想知道如何在get_posts循环之外获取自定义帖子或其页面的偏移量。
我开发了一个外部Web应用程序,它使用JSON API插件连接到wordpress博客,并使用以下AJAX请求显示给定的帖子页面:
?json=get_posts&orderby=date&order=desc&count=x&page=n
(这将返回x帖子的第n页)
这很好用,但现在我想在wordpress博客“单一帖子”页面上设置一个链接到这个应用程序,如“在应用程序中显示此帖子”,当前页面偏移量作为参数。因此,我将能够在应用程序中阅读此参数并获取包含帖子的页面的帖子,并突出显示此帖子(作为参数发送)。
如果我可以获得偏移量,我将能够使用模运算符显示正确的页面:
如果偏移= 22且计数= 10,则显示第3页并突出显示第2页
page = Math.ceil(offset / count);
post_to_highlight_position = offset % count;
你知道我怎么做吗?或者,如果有更好的方法来实现这一目标?
答案 0 :(得分:0)
在做了一些研究之后,我终于找到了一种使用自定义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获取偏移量,但您可以使用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个位置