如果POST太长,WP REST API返回空白响应

时间:2018-10-28 作者:Null TX

我正在开发一个iOS应用程序,它需要使用WP Rest API来获取帖子。一切都很顺利,我使用此端点按ID获取帖子:

https://example.com/wp-json/wp/v2/posts/12345
大多数情况下,API都会按预期返回帖子,但如果文章长度超过1300字左右,则会返回空响应。我所说的空是指页面将完全为空,甚至没有404状态码或空数组[]。它确实返回代码200,这意味着一切看起来都很好,但响应为空。

从我的疑难解答来看,空白回复的原因似乎是因为帖子的字数太多。我有没有办法更新WP REST API设置?还是必须创建一个新的自定义端点来处理大型帖子的检索?

任何帮助都将不胜感激。

Update: 我安装了REST API日志插件来查看发生了什么。令我惊讶的是,我在响应正文中得到了正确的响应,但由于某些原因,它没有显示在任何浏览器中。将不得不进一步调查。

Update2: 还是没什么。我有第二个wordpress安装,我决定尝试在那里复制东西。我把1300多字的帖子导入了新网站,同样的事情也发生了。如果你试图通过id或slug获取帖子,它只会返回一个空白页。。。

小咆哮。不确定问题是什么,但WP REST API只给了我问题。不知道为什么他们甚至决定更新API,因为v1对我来说工作得非常好。v2给了我一个又一个问题。

Update3: 决定编写一个自定义端点,看看发生了什么。编写了一个函数,只返回似乎是问题所在的post\\u内容。这是我得到的代码:

 function get_long_post ( $params ){
    $post = get_post(59101);

    if( empty( $post ) ){
        return null;
    }
    return $post->post_content;
 }  
 // Register the rest route here.

 add_action( \'rest_api_init\', function () {
        register_rest_route( \'custom/v1\', \'long-post\',array(
            \'methods\'  => \'GET\',
            \'callback\' => \'get_long_post\'
        ) ); 
 } );
它只需通过ID提取帖子并返回内容。我硬编码了有问题的长帖子的ID,令人惊讶,回复是空白的。适用于任何其他非超长帖子。

更新4:这个“问题”可能会在我所有的更新中变得很长。但对于必须处理这一问题的可怜的灵魂来说,我认为尽可能多地记录是最好的。

我确实觉得我取得了进展,因为如果我得到了整个post_内容的子串,我现在至少可以看到一部分长post_内容。任何超过7603个字符的子字符串似乎都不会显示在chrome或其他浏览器中。下面是一个修改后的函数,它至少返回部分内容:

     function get_long_post ( $params ){
        $post = get_post(59101);

        if( empty( $post ) ){
            return null;
        }
        //echo "<script>console.log( \'Debug Objects: " . $post->post_title . "\' );</script>";
        $output =  apply_filters( \'the_content\', $post->post_content );

        return substr($output,0,7603);
}
不要问我为什么是7603个字符。我不知道为什么这个数字这么奇怪。还需要进一步调查。

更新5:已取得进展!如果我使用echo而不是return,那么我会得到完整的帖子内容。此时,我正在考虑使用echo而不是return重写所需的get REST api v2函数。必须进行大量格式化才能将其转换为有效的JSON格式,但目前看来,这似乎是唯一的解决方案。将在我编写完整函数时更新此内容。毕竟,对于我的iOS应用程序,我只需要帖子中的一些东西,比如帖子标题、作者、内容、类别、特色图片、帖子ID和标签。以下是迄今为止的功能:

 function get_long_post ( $params ){
    $post = get_post(59101);

    if( empty( $post ) ){
        //return null;
    }
    $output =  apply_filters( \'the_content\', $post->post_content );
    echo $output; 
    return null;
 }

1 个回复
SO网友:kevin tanzil

我和你有同样的问题,我确实拥抱了这一问题好几天,我发现,问题不限于7603,我发现问题实际上是json\\U编码。

那么如何解决这个问题呢?我制作了一个自定义API,并使用该选项使用JSON\\u encode将数据转换为JSON。

解决方案$json=json\\U编码($your\\u array,json\\u HEX\\u TAG | json\\u HEX\\u APOS | json\\u HEX\\u Quote | json\\u HEX\\u AMP | json\\u UNESCAPED\\u UNICODE)

返回$json

通过使用该解决方案,您无需回显数据。

结束

相关推荐

Php致命错误:无法将WP_REST_RESPONSE类型的对象用作wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php中

我向WordPress添加了一个自定义端点,如下所示: add_action( \'rest_api_init\', function () { register_rest_route( \'menc/v1\', \'/crosscat/(?P[\\w-]+)/(?P[\\w-]+)\', array( \'methods\' => \'GET\', \'callback\' => \'dept_cat_api\',&#x