在wp rest API中检测唯一帖子的最佳方法

时间:2016-03-02 作者:mil

我正在为我的WordPress博客开发一个android应用程序。我很难发现并发帖。因此,首先,我给你一个关于我的愿景:

我想从过去获得帖子,所以我这样做:

获取最大的帖子id(换句话说,最新的帖子id),然后在我的应用程序中获取数据库中的最小帖子id,然后我可以找到获取帖子的确切页码。

因此,我检查了我的wp rest api插件的结果,似乎每个帖子的帖子都会增加2,所以我基于此编写了我的应用程序,但是,现在我查看我博客中的第一篇帖子,实际上没有顺序。

对于一些是+1,对于其他一些是+3和。那么,主要的问题是,帖子ID的变化顺序是什么?有没有办法手动设置帖子Id?(一个简单的方法)应该有一个有序的变量,有一个应用程序的音调,它可以保存应用程序数据库中的帖子。

对不起我的语言。

编辑:添加代码

 public void GetPostFromNet_LoadMore_firstStep() {
    ServiceCall serviceCall = new ServiceCall("mysiteURL");
    MyApi myApi = serviceCall.s();


    Call<JsonElement> call2 = myApi.loadQuestions("/wp-json/posts?fields=ID,title,type,comment_status,modified_gmt,featured_image&filter[posts_per_page]=1&page=1");

    call2.enqueue(new Callback<JsonElement>() {

        @Override
        public void onResponse(Response<JsonElement> response, Retrofit retrofit) {
            try {

                LoadMore_DoFirstStep(response);


            } catch (Exception ex) {
                Toast.makeText(MainActivity.this, ex.toString() + "__call2_somthing happend" + ex.getLocalizedMessage(), Toast.LENGTH_SHORT).show();

                ex.printStackTrace();


            }

        }

        @Override
        public void onFailure(Throwable t) {
            t.printStackTrace();
            Toast.makeText(getApplicationContext(), "onFailure", Toast.LENGTH_SHORT).show();


        }
    });


}


 public void LoadMore_DoFirstStep(Response<JsonElement> response) throws Exception {
    ArrayList<obj_sitePosts> postItems = new ArrayList<>();
    JsonArray jsonArray = response.body().getAsJsonArray();
    if (!isNull(jsonArray) && jsonArray.size() > 0) {
        postItems = convertJson_getPosts(jsonArray);
        if (!isNull(postItems) && postItems.size() > 0) {

            long latest_ID = postItems.get(0).getID();

            db_sitePosts db_newPost = new db_sitePosts(getApplicationContext());

            long smallest_ID = db_newPost.getAllPost_OrderBy().get(db_newPost.getPostCount() - 1).getID();
            long diffID = Math.abs(latest_ID - smallest_ID);

            if (diffID > 0) {

                int resualt = 0, quotient = 0, remaning = 0;
                resualt = (int) Math.floor(diffID / 2);
                quotient = (int) Math.ceil(resualt / POST_LOAD_PER_REQUEST);
                remaning = resualt % POST_LOAD_PER_REQUEST;

                if (quotient > 0) {
                    if (remaning == 0) {
                        //call function usign page=quotient+1; andd POST_LOAD_PER_REQUEST
                        LoadMore_DoSecendStep(quotient + 1, POST_LOAD_PER_REQUEST);
                    }
                    if (remaning > 0) {
                        LoadMore_DoSecendStep(quotient, POST_LOAD_PER_REQUEST);
                    }
                }
                long page = diffID / POST_LOAD_PER_REQUEST;


            } else {
                //it mean site have just one POST!!!
                Toast.makeText(getApplicationContext(), "no new Post!!!", Toast.LENGTH_SHORT).show();
            }

        } else {
            Toast.makeText(getApplicationContext(), "no post has been sent Yet!!!", Toast.LENGTH_SHORT).show();

        }

    } else {
        Toast.makeText(getApplicationContext(), "no post has been sent Yet!!!", Toast.LENGTH_SHORT).show();
    }
}
GetPostFromNet\\u LoadMore\\u第一步:获取最大的帖子ID。

LoadMore\\u DoFirstStep:查找数据库中存在的最小post id和来自GetPostFromNet\\u LoadMore\\u firstStep的which之间的post数量。

LoadMore\\u Dosecentstep:获取正确的页面

1 个回复
SO网友:Mark Kaplun

帖子ID不是帖子的外部ID,而是一个内部ID,您不应该期望其中有任何一致性。由于几乎所有内容都存储在post表中,ID的值不仅取决于“真实”帖子的数量,还取决于修订、图像和任何其他CPT的数量。

除此之外,还有一些像草稿一样不公开的帖子。

您应该只使用偏移量和所需的结果数作为查询的参数。

相关推荐

如何修改WP_INCLUDE/BLOCKS/LATEST_posts.php

我是WordPress开发的初学者,希望得到一些帮助。我在一个简单的WordPress网站上工作。基本上,用户希望在主页上显示最新的帖子。我使用了最新帖子块,并将其设置为显示整个帖子内容,现在用户不希望帖子标题链接到单个帖子页面(因为帖子的内容显示在主页上)。如何安全地修改模板文件,使其像h2标记一样使用,而不是在主题中使用的href标记。我知道您可以创建子主题并修改wp_content 文件,但我不确定如何处理中的文件wp_include. 我读到一些关于修改functions.php 但我不确定,如果