首页 > 解决方案 > 在自定义 REST API 端点中输出 ACF 字段选择

问题描述

我正在尝试为 WP REST API 创建一个自定义端点,该端点应包含某些 ACF 字段及其创建的选项,以防该字段是选择字段。

这是我正在尝试的代码functions.php

function test_get_acf() {
    $field = get_field_object('credits');
    $credits = array();
    if( $field['choices'] ) {
        foreach( $field['choices'] as $value => $label ) {
            array_push($credits, $value);
        }
    }
    $items = array(
        'credits' => $credits
    );
    return $items;
  }

这是创建端点的函数:

  function test_register_api_endpoints() {
    register_rest_route( 'test/v2', '/acf', array(
      'methods' => 'GET',
      'callback' => 'test_get_acf',
    ) );
  }

  add_action( 'rest_api_init', 'test_register_api_endpoints' );

但是,这样做我得到以下 JSON 输出:

[
   "credits": [ ]
]

所以它显然不起作用。我究竟做错了什么?

标签: wordpresswordpress-rest-api

解决方案


问题是 ACF 找不到您要求的字段,根据get_field_object() 文档,它还需要一个post_id默认为当前帖子 ID 的参数,以便仅获取字段对象(在帖子上下文之外),您应该像这样使用字段键:

$field = get_field_object('field_5e380cf7b4bf0');

在这种情况下,这field_5e380cf7b4bf0是您所在领域的关键。如果您必须使用此方法并且还需要动态检索密钥,这里有一条说明如何通过其名称获取字段密钥。

或将示例帖子 ID 传递给它:

global $wp_query;
$field = get_field_object('credits', $wp_query->posts[0]->ID); // Or just pass a number like 1 if you are sure that a post with that id exists

注意:如果您刚刚创建了一个字段并且还没有任何帖子使用它,它也可能导致false您调用时get_field_object()


推荐阅读