如何访问刚刚发布的帖子的帖子元?

时间:2012-10-19 作者:Poulomi Nag

我在用钩子publish_post 在需要刚发布的帖子的帖子元的地方运行我的代码。但我正在寻找的post meta值在执行时不知何故不可用。检查时wp_postmeta 表中,我发现我的元键值尚未创建。此外,我希望这是一篇首次发表的文章。有没有其他钩子可以让我接触到它?

function push_notification($post_id) 
{ 
    $ref_ids = get_post_meta($post_id,\'ref_id\'); 

    if($ref_ids) 
    { 
        //my code goes here 
    } 
} 

add_action(\'publish_post\',\'push_notification\');

3 个回复
最合适的回答,由SO网友:Poulomi Nag 整理而成

解决了!习惯于save_post 要运行push_notification() 以及运行函数save_post_meta() 这节省了我的帖子元。问题发生的原因是push_notification() 之前被解雇save_post_meta() 由于无法保存元数据,因此无法访问。只是改变了职能的优先顺序,使其像这样工作:

function push_notification($post_id) 
{ 
  $ref_ids = get_post_meta($post_id,\'ref_id\'); 

  if($ref_ids) 
  { 
    //my code goes here 
   } 
} 
add_action(\'save_post\',\'push_notification\',11,1);

function save_post_meta($post_id,$post)
{
   //check for nonces and current user capabilities

   $ref_id = sanitize_html_class($_POST[\'ref_id\']);
   update_post_meta($post_id,\'ref_id\',$ref_id);
}
add_action(\'save_post\',\'save_post_meta\',10,2);

function no_notification()
{
  remove_action(\'save_post\',\'push_notification\',11,1);
}
add_action(\'publish_to_publish\',\'no_notification\');
最后一个函数no_notification() 确保push_notification() 仅在第一次创建帖子时触发,而不用于更新。

SO网友:stevejohnson

你似乎只关心new 帖子(正如之前创建的帖子将附加postmeta,并且在运行转换时可用),并且仅当存在某个postmeta值时,才希望对新创建的帖子执行push\\u通知。对的

在所有update\\u postmeta调用之后,使用do\\u action()在保存postmeta的函数中创建自己的挂钩。此时将保存Posteta,您可以进行测试。

SO网友:Ptitsuisse

我还注意到当你打电话的时候get_post_meta() 在内部add_action(\'publish_post\',..) 未返回post meta。

这是因为当您发布帖子并调用“publish\\u post”时,the post meta is not yet saved in the database. update_post_meta() (在数据库中保存post meta的函数)在“publish\\u post”之后调用。这就是为什么如果您先保存为草稿,然后再发布,它就会起作用。

为了避免这个问题,我使用这种代码:

$post_meta_value = get_post_meta($post_id,\'meta_key\',true);
if($post_meta_value==\'\'){ $post_meta_value = $_POST[\'meta_key\']; }
当您单击“发布”按钮时,这将从$\\u帖子中获取您的价值
$_POST[\'meta_key\'] 可能会有所不同,具体取决于您如何在后端设置post meta或自定义字段。我正在使用ACF(高级自定义字段)插件$_POST[\'fields\'][\'field_52fae7b2b4033\'].

希望这有帮助。

结束

相关推荐

Post publish only hook?

是否有任何钩子只有在帖子第一次“发布”时才会触发。我不想在帖子“更新”或其状态设置为“未发布”然后再次“发布”时执行代码。编辑:add_action(\'draft_to_published\',\'func_tion\'); function func_tion($post){ $post_id = $post->ID; if ( !get_post_meta( $post_id, \'mycoderan\', $single =