【问题标题】:Wordpress Multisite - API posts return an empty arrayWordpress Multisite - API 帖子返回一个空数组
【发布时间】:2018-12-11 17:00:56
【问题描述】:

我尝试使用配置为多站点的 wordpress。 /posts url 返回帖子很好,除了一个站点。

从一个实际存在帖子的站点 (site_id:2),/posts api 端点返回一个空数组。

/media 和 /comments 等其他端点返回 json 数据,该数据通过 id 引用一些帖子。但是像/posts/{id} 这样的端点实际上是posts,其中id 会返回错误json:

{"code":"rest_post_invalid_id","message":"无效的帖子 ID。","data":{"status":404}}

当我在触发上述错误的地方调用 get_current_site() 时,它会为所有站点(对于与每个站点关联的所有 url)返回相同的数据,但是对于上面提到的(site_id:1 或 3)列表由 rest api 生成的帖子不为空,只有/posts 的站点 id:2 有问题。

可以检查什么?

在 wp 中有什么地方可以拦截所有的 sql 查询吗?

【问题讨论】:

    标签: wordpress wordpress-rest-api


    【解决方案1】:

    您可以使用以下方法拦截 WordPress SQL 查询:

    <?php echo $GLOBALS['wp_query']->request; ?>
    

    另一个例子是

    $customPosts = new WP_Query($yourArgs);
    echo "Last SQL-Query: {$customPosts->request}";
    

    另一种方法是使用下面链接中的functions.php文件代码。

    Best Collection of Code for your functions.php file

    【讨论】:

    • 我没有找到任何拦截查询的钩子。 (您的第一行实际上是空的,并且 secod 似乎没有拦截帖子查询)。我转储或直接从 wordpress get_posts 函数返回查询。
    【解决方案2】:

    我直接从 wordpress get_posts 函数转储或返回查询。并且查询似乎确实有效并按 id 返回帖子。

    但是在从get_posts 返回帖子后,WP_REST_Posts_Controller 类的函数get_post 检查其字段post_type 是否等于返回帖子的post_type。如果它不相等,它会触发一个提到的错误。

    该错误实际上并未描述问题。实际上 post 类型不等于控制器的 post 类型。

    实际上帖子类型不是post,而是page。

    所以需要从/posts切换到/pages使用rest端点。

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 2016-06-14
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多