我试图根据发布的帖子的内容发送电子邮件,但只有在第一次发布帖子时才应该这样做。
因此,我使用add_action( \'transition_post_status\', [ $this, \'jackie_publish_post_hook\'], 20, 3 );
回调函数jackie_publish_post_hook
具有以下内容。(全部内容相当大,一些信息与此问题无关,因此我只包括相关部分)
public function jackie_publish_post_hook($new,$old,$post){
...
$accepted = array(\'pending\',\'future\',\'draft\',\'auto-draft\');
if(in_array($old, $accepted) && $new == \'publish\'){
$attachment = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'full\', true);
print_r($attachment);
}
我的问题发生在我尝试访问任何帖子元时,例如特征图像或任何自定义字段,因为它们尚未保存到数据库中。
一些解决方案建议使用add_action( \'publish_post\', ... );
然后访问$_POST
变量,但当我这样做时$_POST
返回空数组
我已从开发人员工具中确认,特征图像id将作为post参数随请求一起发送,但我似乎无法从给定的回调访问它。
如果我强制函数在先前发布帖子后运行,它将返回正确的数据。ie手动运行。$this->jackie_publish_post_hook(\'publish\',\'draft\',get_post(70801));
是否有一种特殊的方法来访问钩子回调函数中第一次提交的数据,或者我做错了什么?
我可以从未保存但已提交到wordpress的数据访问post meta吗?
SO网友:Eduardo Escobar
我通常用save_post 行动
// We\'ll use 1000, low priority (we\'ll let other hooks to run first)
add_action( \'save_post\', [$this, \'jackie_publish_post_hook\'], 1000, 3 );
然后在你的课堂上:
function jackie_publish_post_hook( $post_id, $post, $update ) {
if ( $update ) return false; // Post already existed, don\'t proceed
// Do stuff
}
或者使用post meta:
function jackie_publish_post_hook( $post_id, $post, $update ) {
if ( get_post_meta( $post_id, \'jackie_post_processed\', true ) != \'\' ) return false;
update_post_meta( $post_id, \'jackie_post_processed\', 1 );
// Do stuff
}