gpt4 book ai didi

php - 使用\register_meta() 使用 REST API 检索帖子元

转载 作者:行者123 更新时间:2023-12-04 16:04:02 27 4
gpt4 key购买 nike

WordPress Codex 建议 two ways将帖子元添加到响应中。我正在尝试通过 register_meta() 来实现这一目标因为这对我来说似乎是正确的方法。

问题:

当我使用 register_meta() 时,响应中的

meta 字段仍然为空虽然 show_in_rest 设置为 true。

解决方案:

感谢Allan Fuller ,他指出,$object_type 参数(register_meta() 函数中的第一个参数应该是 post 而不是帖子类型。这comments section of the new code reference 中也提到了


解前说明

我是怎么做到的:

第 1 步:从 functions.php 调用:

\add_action('init', [$this, 'init'], 10);

第 2 步:在初始化函数中注册自定义帖子类型:

\register_post_type(
CompanyPostType::POST_TYPE_NAME,
[
'labels' => [
'name' => __('Companies'),
'singular_name' => __('Company')
],
'public' => true,
'show_in_rest' => true,
'rest_base' => CompanyPostType::REST_BASE,
'has_archive' => false,
'rewrite' => false,
'supports' => [
'custom-fields',
'revisions'
]
]
);

第 3 步 - 利润:在初始化函数中为自定义帖子类型注册元

$meta = [
'key' => CompanyPostType::META_NAME,
'description' => 'Name of the company',
'type' => 'string'
],
\register_meta(CompanyPostType::POST_TYPE_NAME, $meta['key'],
[
'show_in_rest' => true,
'single' => true,
'type' => $meta['type'],
'description' => $meta['description'],
]
);

响应中的元字段仍然为空。但是,如果我在同一初始化 Hook 中使用法典( register_rest_field() )中建议的第二种方式:

\add_action( 'rest_api_init', function () {
\register_rest_field( CompanyPostType::POST_TYPE_NAME, CompanyPostType::META_NAME, array(
'get_callback' => function($params ) {
$meta = \get_post_meta( $params['id'], CompanyPostType::META_NAME, true);
return (string) $meta;
},
) );
} );

然后该字段及其值出现在响应中。我错过了什么?

由于我使用的是自定义帖子类型,因此也值得查看这部分代码。如法典中所述,在注册时我设置了‘supports’=> [‘custom-fields’],以便自定义字段出现在其余响应中。整体看起来是这样的:

        return \register_post_type(
self::POST_TYPE_NAME,
[
'labels' => [
'name' => __('Companies'),
'singular_name' => __('Company')
],
'public' => true,
'show_in_rest' => true,
'rest_base' => self::REST_BASE,
'has_archive' => false,
'rewrite' => false,
'supports' => [
'title',
'custom-fields',
'revisions'
]
]
);

编辑:

我按照 Allan Fuller 的建议尝试过在他的 blog post , 将 \register_meta() 放在 rest_api_init 钩子(Hook)中,但它对响应中的元没有影响。

最佳答案

如果你想使用 register_meta 来工作,你必须明确地将它挂接到 rest_api_init
所以对于你的例子

add_action( 'rest_api_init', 'register_posts_meta_field' ); 
function register_posts_meta_field() {
register_meta('post', $meta['key'],
[
'show_in_rest' => true,
'single' => true,
'type' => $meta['type'],
'description' => $meta['description'],
]
);
}

以上内容未经测试,但请在此处查看代码的工作插件版本 http://badlywired.com/2018/01/getting-post-meta-via-wordpress-rest-api/

对象类型需要'post'到自定义帖子类型名称

参见 https://codex.wordpress.org/Function_Reference/register_meta

第一个参数是 object_type - 有效的对象类型由 wordpress 预定义,CPT 是一种帖子类型

关于php - 使用\register_meta() 使用 REST API 检索帖子元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49533689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com