如何在第一次发布帖子时访问帖子元

时间:2021-04-04 作者:domii

我试图根据发布的帖子的内容发送电子邮件,但只有在第一次发布帖子时才应该这样做。

因此,我使用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参数随请求一起发送,但我似乎无法从给定的回调访问它。The POST Request parameters from the browser side

如果我强制函数在先前发布帖子后运行,它将返回正确的数据。ie手动运行。$this->jackie_publish_post_hook(\'publish\',\'draft\',get_post(70801));

是否有一种特殊的方法来访问钩子回调函数中第一次提交的数据,或者我做错了什么?

我可以从未保存但已提交到wordpress的数据访问post meta吗?

1 个回复
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
}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在