UPDATE_POST_META()未在存储-发布过滤器内保存数据

时间:2016-10-21 作者:BlueDreaming

所以我正在开发一个自定义的保存后过滤器。它可以处理我用来生成信息的外部API调用,这非常棒。总之,我从API中获取文件信息,下载几个文件,将它们写入目录,压缩并删除它们。一切正常。在这个过程中,我从API中提取数据点,并将它们存储为变量,保存为元字段。我的函数看起来是这样的,减去了所有不需要看到的内容(假设该函数可以工作,但update\\u post\\u meta()没有启动)。

function stuff_save( $post_id ) {
    $post_type = get_post_type($post_id);
    // If this is just a revision, do nothing.
    if ( wp_is_post_revision( $post_id )|| "animations" != $post_type  )
        return;
   /**code to generate data points**/
        $datapoint = get_post_meta($post_id,custom_field,1);
        $update_var= string_from_API_Call; 
/**uses $datapoint to do a thing; I\'m using this result elsewhere, can echo it, and it\'s successful.**/

        $hat = update_post_meta( $post_id, \'field_name\', $update_var );//returns a value, but that number doesn\'t correspond with any meta key in my database nor does the data save anywhere. 
 }
}add_action( \'save_post\', \'stuff_save\' );
现在,如果我回显$hat,它会返回一个数字,就像它会返回的一样-但是,当我查看post\\u meta表时,该meta键不仅不存在,而且当我刷新脚本时,它也会增加。

有什么帮助吗?

2 个回复
最合适的回答,由SO网友:BlueDreaming 整理而成

我解决了自己的问题。

保存表单之前,先保存post挂钩。它甚至允许我们访问$\\u POST对象,并允许我们在原始保存发生之前与它进行交互。

这本质上意味着我正在用空白的formdata覆盖我的值。

我没有更新post meta,而是将更新后的值记录并写入$\\u post对象,然后作为原始save post的一部分提交。

$hat = update_post_meta( $post_id, \'field_name\', $update_var );
成为

/**document  this well or you\'ll drive someone insane in the future.**/ 


$_POST[\'field_name\'] = $update_var;
感谢大家的想法和帮助。你无疑激励了我去思考这件事。

SO网友:CodeMascot

我认为主要问题在于if 块确实如此return 执行前update_post_meta( $post_id, \'field_name\', $update_var ) 或者不执行,导致缩进。所以我认为下面的代码可以完成您的工作-

function stuff_save( $post_id ) {

    $post_type = get_post_type($post_id);

    // If this is just a revision, do nothing.
    if ( wp_is_post_revision( $post_id )|| "animations" != $post_type  ) {
        return;   
    }

    /**code to generate data points**/
    $datapoint = get_post_meta($post_id,custom_field,1);
    $update_var= string_from_API_Call;

    /**uses $datapoint to do a thing; I\'m using this result elsewhere, can echo it, and it\'s successful.**/    
    $hat = update_post_meta( $post_id, \'field_name\', $update_var );//returns a value, but that number doesn\'t correspond with any meta key in my database nor does the data save anywhere.

}

add_action( \'save_post\', \'stuff_save\' );