moxie-lean / wp-endpoints-post
通用的、可定制的文章端点,通过 WP-API 暴露文章内容
Requires
- php: >=5.4
- moxie-lean/wp-acf: 1.*.*
- moxie-lean/wp-endpoint: 1.*.*
- moxie-lean/wp-utils: 1.*.*
Requires (Dev)
This package is not auto-updated.
Last update: 2022-02-01 12:57:47 UTC
README
此包已过时。LEAN 现在使用 WordPress REST API 插件
通用的、可定制的视图端点,通过 WP-API 暴露内容。此扩展将创建一个默认位于
/wp-json/leean/v1/view
的端点,返回前端应用渲染视图所需的所有数据。
该端点接受一个 slug 参数(例如 /wp-json/leean/v1/view?slug=sample-page
)并返回以下数据,针对单个文章
- Id
- 模板
- 内容
- WordPress 默认字段:标题、内容
- 与页面关联的所有 ACF 字段,按其 ACF 字段组分组。
- 元数据:标题、描述、开放图(注意这尚未实现)。
注意:目前它仅适用于单个文章(包括页面和 cpt)。我们需要考虑其他类型视图的最佳解决方案,例如存档页面。
入门
安装此包的最简单方法是使用终端中的 composer
composer require moxie-lean/wp-endpoints-view --save
或者在您的 composer.json
文件中添加以下行
"require": { "moxie-lean/wp-endpoints-view": "dev-master" }
这将从 packagist 网站下载文件 并将您设置为位于存储库 master 分支的最新版本。
之后,您可以包含 autoload.php
文件,以便在对象创建期间自动加载类。
include '/vendor/autoload.php';
最后,您需要通过将以下内容添加到代码中来初始化端点
\Lean\Endpoints\View::init();
用法
此扩展有几个过滤器可以用来自定义输出。此外,它还对 ACF 数据进行了有用的额外操作,使其对前端应用更有用。
过滤器
许多过滤器传递的常见参数
- $endpoint : 端点名称。对于此扩展始终为 '/view'。
- $post_id : 文章 ID。
- $field : ACF 字段对象。
ln_endpoints_api_namespace
自定义 API 命名空间(《/wp-json/leean/v1/view》中的 'leean')
add_filter( 'ln_endpoints_api_namespace', function( $namespace, $endpoint ) { return 'my-app'; }, 10, 2 );
ln_endpoints_api_version
自定义 API 版本(《/wp-json/leean/v1/view》中的 'v1')
add_filter( 'ln_endpoints_api_version', function( $version, $endpoint ) { return 'v2'; }, 10, 2 );
ln_endpoints_query_args
在通过 WP_Query 查询文章之前自定义查询参数。$request 是端点处理器接收到的 WP_REST_Request 对象。
add_filter( 'ln_endpoints_{endpoint}_query_args', function( $query_args, $request ) { $query_args['post_type'] = 'page'; return $query_args; }, 10, 3 );
ln_endpoints_data
在发送之前自定义结果。
add_filter( 'ln_endpoints_data_{endpoint}', function( $data, $post_id ) { $data['content']['title'] = '***' . $data['content']['title'] . '***'; return $data; }, 10, 3 );
在前两个过滤器中 {endpoint}
是您端点的名称,在这种情况下是 post
,因此例如 ln_endpoints_data_post
是您应该使用的过滤器名称来过滤数据。
ln_endpoints_acf
自定义 ACF 字段的值。
add_filter( 'ln_endpoints_acf', function( $value, $endpoint, $post_id, $field ) { if ( 'image' === $field['type'] ) { return 'https://upload.wikimedia.org/wikipedia/commons/1/1b/Nice-night-view-with-blurred-cars_1200x900.jpg'; } return $value; }, 10, 4 );
ln_endpoints_acf_image_size
设置要使用的图像大小。仅当返回格式设置为 'id' 的图像字段激活。请注意,$sub_field 仅用于重复器中的图像。
add_filter( 'ln_endpoints_acf_image_size', function( $size, $endpoint, $post_id, $field, $sub_field ) { if ( 'logo' === $field['name'] ) { return 'very_small'; } return $size; }, 10, 4 );
ln_endpoints_acf_repeater_as_array
是否以数组的形式返回重复器。仅当重复器字段只有一个值时激活。
add_filter( 'ln_endpoints_acf_repeater_as_array', function( $as_array, $endpoint, $post_id, $field ) { $post = get_post( $post_id ); return 'training' === $post->page_template && 'cta' === $field['name'] ? false : $as_array; }, 10, 4 );
ACF 操作
文章
当 ACF 字段类型为 '文章对象' 且返回格式为 'id' 时激活。获取文章的所有内容(包括其 ACF 字段)。如果设置了 '选择多个值' 选项,则返回文章数据的数组。
图像
当 ACF 字段类型为 '图像' 且返回格式为 'id' 时激活。必须使用 ln_endpoints_acf_image_size
过滤器设置图像大小。返回图像 URL、宽度、高度和 alt。
重复器
当 ACF 字段类型为 '重复器' 且恰好有一个项目时激活。它传递一个过滤器 ln_endpoints_acf_repeater_as_array
,如果为 false,则返回一个对象而不是数组。