Wordpress-在单个帖子页面中获取帖子偏移量/帖子页面偏移量(循环外)


Wordpress - get post offset/posts page offset in single post page (outside the loop)

我想知道如何在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+偏移关联列表,并添加了自定义行(pageposition):

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个位置