post 创建后,REST 的 ACF 字段为空
ACF fields empty for REST after post created
每次 post 发布时我都会发送推送通知。一切都按预期工作,但 ACF 字段为空。相反,当我执行 re-save 时,post 数据正确通过。
基本工作流程
- 用户发布一个post
- 触发发送推送通知的操作
- ACF 字段的有效负载为空(标题、摘录、其余字段都可以)
我已经阅读了几个线程,但无法实现在创建 post 后将 ACF 字段传送到 rest。
我尝试过的:
使用优先级 100 以确保 post 已经保存,然后再获取信息。
add_action(
"save_post",
["YaguaretePluginApiBlog", "postPushNotification"],
100,
3
);
尝试使用 transition_post_status,结果相同。
add_action(
"transition_post_status",
["YaguaretePluginApiBlog", "postPushNotification"],
99,
3
);
或
add_action('rest_after_insert_post', ["YaguaretePluginApiBlog", "postPushNotification"], 100, 3);
所有这些都可以毫无问题地触发,但是在获取 ACF 字段时却没有任何效果。
也尝试了默认 acf/save_post,但不幸的是,与其他动作相比,这个甚至没有启动
add_action("acf/save_post", [
"YaguaretePluginApiBlog",
"postPushNotification",
]);
这是我尝试获取 acf 字段的方法
尝试使用 ACFthe_field 函数
$data[notificationType] = the_field(
"yaguarete_push_notification",
$_post->ID
);
尝试使用 post_meta 检索字段信息
$data[notificationType] = get_post_meta($post["id"])[
"yaguarete_push_notification"
][0]
尝试使用来自 ACF
的 get_field
get_field("yaguarete_push_notification", $post["id"], false)
似乎没有任何效果,有更多经验的人可以指出我做错了什么吗?
提前致谢
对于遇到同样问题的任何人,我最终使用了以下钩子“rest_after_insert_post”。
经过多次测试后,仅在 post 发布时才触发某些操作,这成功了:
add_action(
"rest_after_insert_post",
["YaguaretePluginApiBlog", "postPushNotification"],
100,
3
);
only send push when new post has been published
function postPushNotification($post, $request, $creating)
{
$postOriginal = $post;
$post = [get_post($post->ID)];
$post = YaguaretePluginApiBlog::formatPosts($post)[0];
//only send push notification when
if (
$postOriginal->post_type == "post" &&
$postOriginal->post_status == "publish" &&
$postOriginal->post_modified == $postOriginal->post_date
) {
Hook 已经保存了所有元数据,包括 ACF 字段,这是我最初的问题,没有从这个自定义字段中检索值
每次 post 发布时我都会发送推送通知。一切都按预期工作,但 ACF 字段为空。相反,当我执行 re-save 时,post 数据正确通过。
基本工作流程
- 用户发布一个post
- 触发发送推送通知的操作
- ACF 字段的有效负载为空(标题、摘录、其余字段都可以)
我已经阅读了几个线程,但无法实现在创建 post 后将 ACF 字段传送到 rest。
我尝试过的:
使用优先级 100 以确保 post 已经保存,然后再获取信息。
add_action(
"save_post",
["YaguaretePluginApiBlog", "postPushNotification"],
100,
3
);
尝试使用 transition_post_status,结果相同。
add_action(
"transition_post_status",
["YaguaretePluginApiBlog", "postPushNotification"],
99,
3
);
或
add_action('rest_after_insert_post', ["YaguaretePluginApiBlog", "postPushNotification"], 100, 3);
所有这些都可以毫无问题地触发,但是在获取 ACF 字段时却没有任何效果。
也尝试了默认 acf/save_post,但不幸的是,与其他动作相比,这个甚至没有启动
add_action("acf/save_post", [
"YaguaretePluginApiBlog",
"postPushNotification",
]);
这是我尝试获取 acf 字段的方法
尝试使用 ACFthe_field 函数
$data[notificationType] = the_field(
"yaguarete_push_notification",
$_post->ID
);
尝试使用 post_meta 检索字段信息
$data[notificationType] = get_post_meta($post["id"])[
"yaguarete_push_notification"
][0]
尝试使用来自 ACF
的 get_fieldget_field("yaguarete_push_notification", $post["id"], false)
似乎没有任何效果,有更多经验的人可以指出我做错了什么吗?
提前致谢
对于遇到同样问题的任何人,我最终使用了以下钩子“rest_after_insert_post”。
经过多次测试后,仅在 post 发布时才触发某些操作,这成功了:
add_action(
"rest_after_insert_post",
["YaguaretePluginApiBlog", "postPushNotification"],
100,
3
);
only send push when new post has been published
function postPushNotification($post, $request, $creating)
{
$postOriginal = $post;
$post = [get_post($post->ID)];
$post = YaguaretePluginApiBlog::formatPosts($post)[0];
//only send push notification when
if (
$postOriginal->post_type == "post" &&
$postOriginal->post_status == "publish" &&
$postOriginal->post_modified == $postOriginal->post_date
) {
Hook 已经保存了所有元数据,包括 ACF 字段,这是我最初的问题,没有从这个自定义字段中检索值