WP REST API将永久链接转换为POST ID以进行提取

时间:2017-10-12 作者:pete_schuster

我正在将我现有的WordPress站点转换为在前端使用Preact/Redux,并使用WP REST API从管理员处获取post数据。

我将在中使用React路由器和重写。htaccess将URL重写为索引。html文件,React路由器应处理请求。

给定的现有URLhttps://peteschuster.com/2017/10/high-praise-react-react-ecosystem/ 我想我会把路线设置为/:year/:month/:slug

我的问题是,如何使用这些参数来获取帖子ID,以便调用REST端点:GET /wp/v2/posts/<id>?

也许还有其他方法可以做到这一点?我尝试了以下几种组合:https://peteschuster.com/wp/v2/posts/2017/10/high-praise-react-react-ecosystem/ 无济于事。我在想可能类似于/feed 处理方式如下:https://peteschuster.com/2017/10/high-praise-react-react-ecosystem/json

任何指导都将不胜感激。谢谢

3 个回复
最合适的回答,由SO网友:ssnepenthe 整理而成

core rewrite API确实提供了以下功能url_to_postid() (正如@StephenSabatini所提到的)可以从URL中找到帖子ID。然而,仅仅为了确定职位ID而提前提出请求似乎不太理想。。。

REST API本机不提供按设置之外的日期进行查询的功能beforeafter 这样对你没什么帮助。

您可能会忽略日期参数并按slug进行查询。例如:

https://peteschuster.com/wp-json/wp/v2/posts?slug=high-praise-react-react-ecosystem
或者,您可以创建自定义端点并执行任何类型的查询。检查REST API handbook 了解更多信息。

关于/json 端点:这不是本机存在的东西,但肯定是可行的。

要实现它,请查看重写端点:

  • Codex page
  • Code reference page
  • Blog post with more info on using rewrite endpoints

    $request = new WP_REST_Request( \'GET\', \'/wp/v2/posts\' );
    $request->set_param( \'slug\', \'high-praise-react-react-ecosystem\' );
    $response = rest_do_request( $request );
    $post = $response->data;
    
    以这种方式使用REST API在handbook FAQ.

    这会给服务器配置增加一些额外的复杂性,因为现在您必须路由以json 直接转到WordPress而不是你的前端,但这应该不会太困难。

    希望这能给你一些想法。。。

SO网友:Stephen Sabatini

首先,REST API URL基础是:

https://peteschuster.com/wp-json/wp/v2/posts/

我不确定我是否从整体上理解了您的问题,但如果您试图从帖子URL获取ID,您可以使用url_to_postid($url);.

请参见:https://codex.wordpress.org/Function_Reference/url_to_postid

完整URL为:https://peteschuster.com/wp-json/wp/v2/posts/ID_HERE

e、 g。https://peteschuster.com/wp-json/wp/v2/posts/4177

你也可以通过查询(我可能会推荐)

https://peteschuster.com/wp-json/wp/v2/posts?slug=high-praise-react-react-ecosystem

你可以使用$post->post_namebasename(get_permalink());.

SO网友:Thomas Karlsson

我想我会在这上面加上我的两分钱。

使用wp-json/wp/v2/posts?slug= 在开始使用之前,效果非常好parent & child 第页。

除非其中一页是另一页的子页,否则任何两页都不能有相同的slug。这里有一个简单的例子,我有一个名为lorem-2的页面(由于我已经有一个名为lorem的页面,所以自动添加了-2)。

然后,我在lorem中添加了一个名为lorem-2的子页面,当我查询lorem-2时,我得到了两个页面。

更安全的路由是创建一个自定义的REST路由,让您可以查询whole URL,它将为您提供准确的帖子/页面

enter image description here

结束

相关推荐

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