解决方案是使用另一个钩子,该钩子在古腾堡将post元数据保存到WP API后触发。阅读后this related discussion 关于Github和检查this code by n7studios, 我发现rest_after_insert_post
是一个可以使用的钩子。
因此,使用Gutenberg时可靠检查WordPress Post元字段是否存在的方法是:
function read_my_meta_field( $post, $request ) {
$my_meta_field = get_post_meta($post->ID, \'my_post_meta_field\', true);
// Process $my_meta_field as desired...
}
add_action(\'rest_after_insert_post\', \'read_my_meta_field\', 10, 2);
请注意,只需更改
post
在
add_action()
函数,因此不使用
\'rest_after_insert_post\'
您将使用
\'rest_after_insert_whatever\'
.
最后,这里是我自己问题的一个更完整的答案,它只在发布后检查元字段。
function run_on_post_publication( $ID, $post ) {
// Only register this hook if we really are publishing a new post
add_action(\'rest_after_insert_post\', \'read_my_postmeta_field\', 10, 2);
}
add_action(\'publish_post\', \'run_on_post_publication\', 10, 2);
function read_my_postmeta_field( $post, $request ) {
$my_meta_field = get_post_meta( $post->ID, \'my_post_meta_field\', true);
// Process $my_meta_field as desired...
}
作为参考,如果您想更准确地控制代码的运行时间,请查看
\'transition_post_status\' hook.