我正在开发一个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;
}