如何在WordPress中使用滤镜/参数作为无头cms API

时间:2019-09-06 作者:Anuj Agnihotry

我们使用wordpress作为无头cms,使用自定义帖子类型和高级自定义字段插件,我们在自定义帖子的字段中输入数据,localhost:8888/wordpress/wp json/wp/v2/places?city=xyz这工作正常,但我们需要在此url中使用过滤器,以便我们可以根据所需的过滤器(自定义帖子中的特定字段)获取数据。

1 个回复
SO网友:Ted Stresen-Reuter

ACF添加了post meta,因此,您需要使用pre_get_posts 行动具体来说,您需要从$_GET params并修改查询,添加类似pre_get_posts 文档本质上是这样的:

add_action( \'pre_get_posts\', function(&$query) {
    if( is_main_query() && \'\' != $_GET[\'city\'] ) {
        $query->set( \'meta_query\', [
            [
                \'key\'     => \'city\',
                \'value\'   => $_GET[\'city\'],
                \'compare\' => \'=\'
            ]
        ]);
    }
});
请注意,在将输入添加到meta\\u查询之前,还应清理输入。

你必须read the documentation 并且完全理解它。有很多小事会让你失望,比如$query 变量是通过引用传入的(不是函数返回的),因此您所做的任何更改都会实时影响主查询(您不会在操作中返回任何内容,只会在过滤器中返回)。

如果无法实现此功能,您还可以考虑使用posts_clauses filter 但我不确定这是否是你想要的。

很抱歉延迟响应。我必须做大量的research 并进行测试以确保该答案有效。

相关推荐

多站点安装问题和REST API请求的403错误

我已将WP设置为具有子域的多站点安装。站点网络和每个站点的仪表板都工作正常,但我在父站点上使用块编辑器时遇到的错误除外。所以我有wyamazaki。fi作为我的主域,希望创建两个网站,一个用于博客,另一个用于使用多站点的公司网站。我在cPanel中设置了通配符子域,重定向似乎正在工作。每当我在主站点上创建/编辑页面时,块编辑器都会失败,错误为“更新失败”。我检查了Chrome上的控制台,似乎所有的API请求都导致了403错误。(404是我在.htaccess中测试不同重写基的时候)我已经检查了我的。hta