所以我正在开发一个自定义的保存后过滤器。它可以处理我用来生成信息的外部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键不仅不存在,而且当我刷新脚本时,它也会增加。
有什么帮助吗?
最合适的回答,由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\' );