无法通过使用SAVE_POST挂钩的操作保存或更新自定义POST类型的POSTMETA

时间:2017-03-26 作者:UncaughtTypeError

我正在尝试通过挂接到save-post 行动,但由于我不明白的原因,它不起作用。

以下函数位于主题的functions.php:

function save_address_meta() {

      $meta = get_post_meta( get_the_ID() );

      $address = $meta[\'address\'];
      update_post_meta(get_the_ID(), $address, \'test\');
}
add_action( \'save_post\', \'save_address_meta\', 50 );
我试过使用pre_post_update 还有,据我所知save_post 除非在帖子中更新了自定义字段以外的内容,否则不会真正触发,但这一点也不走运。

我花了几个小时在stackexchange和其他各种在线资源上搜索解决方案,但都不太对劲。这是原始代码的简化版本,但即使在这种基本状态下,它似乎也不起作用。

基本上,我尝试获取有问题的自定义字段,然后用字符串值更新它。

如果我print_r 这个$meta 数组中,自定义字段值显示在数组中,如下所示:

 [address] => Array ( [0] => 50 Call Lane Leeds LS1 6DT United Kingdom )
我还尝试使用访问上述函数中的此自定义字段$address = $meta[\'address\'][0].
我可以通过这种方式回显键的值,但如果我没有弄错的话,我需要引用它,以便第三个参数中的字符串按照预期更新值。

3 个回复
最合适的回答,由SO网友:Abdul Awal Uzzal 整理而成

Try changing update_post_meta(get_the_ID(), $address, \'test\'); to update_post_meta(get_the_ID(), \'address\', \'test\');

SO网友:Nathan Johnson

这个save_post 每当WordPress将帖子保存到数据库时,钩子就会触发。这包括保存WP修订,该修订将具有与实际职位不同的职位ID。你很可能正在将帖子元保存到修订版,而不是实际的帖子。

此外save_post 钩子在激发时传递一些变量,包括post ID,因此您不必使用get_the_ID() 作用

function wpse_261414_save_post( $post_id, $post, $update ) {
  //* Make sure this isn\'t a post revision
  if( wp_is_post_revision( $post_id ) ) {
    return;
  }
  $meta = get_post_meta( $post_id );
  $address = $meta[ \'address\' ];
  update_post_meta( $post_id, $address, \'test\' );
}
add_action( \'save_post\', \'wpse_261414_save_post\', 10, 3 );

SO网友:K. Felix

你为什么不试试这样的东西;

function save_address_meta() {
    global $post;
    if($post->post_type == \'your-custom-post-type\'){
        $address_field = \'test\'; //Get your address field here                  
        update_post_meta($post->ID, \'address\', \'test\');
    }
}
add_action( \'save_post\', \'save_address_meta\' );
您可以在其他地方获得字段值,例如,在循环内为;

$address = get_post_meta($post->ID, \'address\', true);