php - Wordpress 帖子更新不通过 wordpress 钩子更新 postmeta
问题描述
我想通过 wordpess 钩子更新帖子的 postmeta 值,但我无法更新它。这是我的代码,
function check_values($post_ID, $post_after, $post_before){
$oldFob = get_post_meta( $post_ID, 'price', true);
if($oldFob){
update_post_meta( $post_ID, 'price', 500);
}else{
add_post_meta( $post_ID, 'fob-price', 500 , true);
}
}
add_action( 'post_updated', 'check_values', 10, 3 );
当我很快就死掉update_post_meta
并检查数据库时,它可以工作,但是在返回编辑帖子页面后,它又恢复了。
基本上它正在更新 post meta,但在它之后,还有另一个默认的 wordpress 函数运行并将其重置为旧值。
任何专家建议,为什么会这样?
解决方案
post_updated
问题是因为在实际保存帖子的元数据之前触发了挂钩。
所以基本上你更新了帖子的元数据,然后用请求中提交的元值更新帖子。
为了解决这个问题,您可以使用save_post
具有高优先级的钩子让钩子最后运行:
add_action('save_post', function ($post_ID) {
$oldFob = get_post_meta( $post_ID, 'price', true);
if ($oldFob) {
update_post_meta( $post_ID, 'price', 500);
} else {
add_post_meta( $post_ID, 'fob-price', 500 , true);
}
}, 100);
更多信息:https ://codex.wordpress.org/Plugin_API/Action_Reference/save_post
推荐阅读
- linux-kernel - gdb 不会在断点处停止 startup_32
- javascript - 通过用户输入通过函数更改全局变量
- c++ - 在上面把我推开?
- scala - Scala宏:限制变量名
- php - 如何在 Yajrabox 中添加显示数据按钮
- tensorflow - 在 Doc2Vec 模型中添加数据 ID
- android - 如何从android中的Amazon cognito用户池中检索用户名
- python - 从 Selenium 和 Python 中的灯箱下载有关 firefox 的 PDF
- amazon-dynamodb - 需要建议:如官方文档所述,将 DynamoDB 构建为新模型
- sql - 如何检查包含字段和类似值的 JSON 字符串?