我通过使用/wp-json/wp/v2/my_post_type?my_categorie=43
但是在检查JSON对象时,我注意到meta是空的?我正在使用高级自定义字段,我想在meta[]中获取该帖子类型的所有自定义字段。
我确实设法用旧的传统方式完成了这项工作,但meta缺少一些有关高级自定义字段的信息。例如,在我的高级自定义字段中,我为价格字段使用了一个前置字符,该字段在价格前面放置了一个欧元符号。我注意到,在旧的传统方式中,prepend丢失了。
然后,我查看了高级自定义字段中的一些函数https://www.advancedcustomfields.com/resources/ 发现他们get_field_objects()
使用帖子的id从帖子中获取字段。这确实为我提供了所需的一切,但只针对一篇帖子。问题是,据我所知,这一次只能为一篇文章完成,因此我认为这将非常缓慢,因为我需要获取与术语匹配的所有文章,然后对每个文章执行此函数,这将进行数据库调用以获取字段。我想为我的自定义帖子类型中匹配一个术语的所有帖子都这样做。
但奇怪的是get_field_objects()
查看“网络”选项卡,我真的找不到与此相关的get?所以我不确定它是否会调用数据库。一定是对的吧?否则它将如何获得这些字段?此外,如果我想调用get\\u field\\u objects(),我必须以旧的传统方式进行。
How I currently get them. This is pretty slow
function do_get_posts_by_term_with_fields()
{
if (!isset($_GET) || !isset($_GET[\'post_type\']) || !isset($_GET[\'taxonomy_name\']) || !isset($_GET[\'term_id\'])) {
echo "There is something wrong with your get request.";
die;
}
$post_type = $_GET[\'post_type\'];
$term_id = $_GET[\'term_id\'];
$taxonomy_name = $_GET[\'taxonomy_name\'];
$args = array(
\'post_type\' => $post_type,
\'tax_query\' => array(
array(
\'taxonomy\' => $taxonomy_name,
\'field\' => \'id\',
\'terms\' => $term_id,
\'include_children\' => false
)
)
);
$posts = get_posts($args);
$posts_with_meta = array_map(\'do_add_fields_to_posts\', $posts);
echo (json_encode($posts_with_meta));
die;
}
add_action(\'wp_ajax_get_posts_by_term_with_fields\', \'do_get_posts_by_term_with_fields\');
add_action(\'wp_ajax_nopriv_get_posts_by_term_with_fields\', \'do_get_posts_by_term_with_fields\');
function do_add_fields_to_posts($post)
{
$post->meta = get_field_objects($post->ID);
return $post;
}
SO网友:Jacob Peattie
首先,您的问题提到了REST API,但实际上您似乎没有使用REST API。您正在使用管理ajax。php。在你的问题背景下,这是一个重要的区别。
其次get_field_objects()
函数是一个ACF函数,用于获取有关ACF字段的数据。不是元,而是由ACF创建的文本字段。因此,您将获得字段类型、标签、说明等信息,而不仅仅是值。
如果希望将所有帖子元分配给一篇帖子,那么应该使用get_post_meta()
不指定密钥:
$post->meta = get_post_meta( $post->ID );
综上所述,对于您的用例,您实际上应该只使用REST API。你只需要使用
register_post_meta()
将所需的元键添加到响应中,如文档所示
here:
$meta_args = array(
\'type\' => \'string\',
\'description\' => \'A meta key associated with a string meta value.\',
\'single\' => true,
\'show_in_rest\' => true,
);
register_post_meta( \'page\', \'my_meta_key\', $meta_args );