如何在页面和自定义样式中将所有ACF字段公开给Wordpress REST API

时间:2019-06-06 08:44:44

标签: php wordpress advanced-custom-fields wordpress-rest-api

我想将属于页面或自定义帖子类型的所有ACF字段公开给WordPress REST API,以便通过javascript进行一些API调用。

最终的预期结果将是ACF对象中的所有ACF字段,您可以轻松访问这些字段。

3 个答案:

答案 0 :(得分:2)

另一种简单的解决方案现在对我来说非常完美。 您可以在functions.phpfields.php上添加以下功能 发送休假请求之前,请使用ACF getFields。您可以将其添加到任何特殊页面rest_prepare_pagerest_prepare_post

ACF数据将在密钥为acf的json响应中

// add this to functions.php
//register acf fields to Wordpress API
//https://support.advancedcustomfields.com/forums/topic/json-rest-api-and-acf/

function acf_to_rest_api($response, $post, $request) {
    if (!function_exists('get_fields')) return $response;

    if (isset($post)) {
        $acf = get_fields($post->id);
        $response->data['acf'] = $acf;
    }
    return $response;
}
add_filter('rest_prepare_post', 'acf_to_rest_api', 10, 3);

答案 1 :(得分:1)

通过以下代码,您将能够在wordpress REST API中公开page和自定义的笔迹ACF字段,并在ACF对象中访问它们。

您显然可以自定义邮政类型,以排除或包括在数组中:$postypes_to_exclude$extra_postypes_to_include

function create_ACF_meta_in_REST() {
    $postypes_to_exclude = ['acf-field-group','acf-field'];
    $extra_postypes_to_include = ["page"];
    $post_types = array_diff(get_post_types(["_builtin" => false], 'names'),$postypes_to_exclude);

    array_push($post_types, $extra_postypes_to_include);

    foreach ($post_types as $post_type) {
        register_rest_field( $post_type, 'ACF', [
            'get_callback'    => 'expose_ACF_fields',
            'schema'          => null,
       ]
     );
    }

}

function expose_ACF_fields( $object ) {
    $ID = $object['id'];
    return get_fields($ID);
}

add_action( 'rest_api_init', 'create_ACF_meta_in_REST' );

以下是参考依据:https://gist.github.com/MelMacaluso/6c4cb3db5ac87894f66a456ab8615f10

答案 2 :(得分:0)

您可以使用以下插件在REST中公开ACF字段。

https://wordpress.org/plugins/acf-to-rest-api/

如果您的ACF字段具有关联关系,并且还希望将这些关联关系包括在内,则可以使用以下插件。

https://github.com/airesvsg/acf-to-rest-api-recursive