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

时间:2013-12-10 12:47:15

标签: php ajax wordpress

我想知道如何在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;

你知道我怎么做吗?或者,如果有更好的方法来实现这一目标?

1 个答案:

答案 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 +偏移关联列表,并添加了自定义行(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个位置