从wp_INSERT_POST_DATA函数获取POST ID?

时间:2011-08-05 作者:Joey Morani

我正在尝试使用该函数get_the_tags() 从“循环”外部
我知道这可以通过使用post ID来实现,如get_the_tags($postID). 有人知道我如何从wp_insert_post_data 作用

我试过使用\'guid\' 这是suggested here, 虽然我运气不好。我也不确定这是否是帖子ID。对此有任何帮助都将不胜感激。谢谢

编辑:
以下是我正在使用的代码:

function changePost($data, $postarr) {

  $postid = $postarr["ID"];
  $posttags = $postarr[\'tags_input\']; // This doesn\'t work.

  $content = $data[\'post_content\'];
  $subject = $data[\'post_title\'];
  if($data[\'post_status\'] == \'publish\') {
    sendviaemail($content, $subject, $postid, $posttags);
  }

return $data;
}

add_filter(\'wp_insert_post_data\',\'changePost\',\'99\',2);
如您所见,我想将帖子ID、帖子标签、内容和主题发送到另一个名为sendviaemail. 一切都很好,只是我不知道如何从帖子中获取标签。

1 个回复
最合适的回答,由SO网友:Chris Carson 整理而成

在以下内容中,“10”是优先考虑的my_func 调用,而“2”是my_func 接受。The latter is important, 自add_filter 函数将默认值定义为1,但wp_insert_post_data 过滤器挂钩发送两个参数。如果不将其设置为2,则不会得到第二个参数。

add_filter("wp_insert_post_data", "my_func", 10, 2);
现在让您的功能。。。

function my_func($data, $postarr){
    //at this point, if it\'s not a new post, $postarr["ID"] should be set
    //do your stuff...
    return $data;
}
编辑---基于上面添加的代码

如果你不需要修改帖子的$data 在帖子保存之前,你用错了钩子。

使用save_post 而不是动作挂钩。保存帖子并保存所有分类法后,将调用此函数。因此,您不必担心是否添加了新标记。它向函数发送两个参数:post的ID和作为对象的post本身。

add_action("save_post", "my_save_post");
function my_save_post($post_id, $post){
    if ("publish" != $post->post_status) return;
    $tags = get_the_tags($post_id); //an array of tag objects
    //call your email func etc...
 }

结束