我想通过wordpess挂钩更新帖子的postmeta值,但我无法更新它。这是我的代码,
public static int findRelevantPercentile(Double [] arr, double searchFor){
int start = 0;
int end = arr.length - 1;
int middle;
do{
middle = (start + end) / 2;
if (arr[middle] >= searchFor){
end = middle;
} else {
start = middle;
}
}while(start + 1 < end);
if (searchFor >= arr[end]){
return arr.length;
} else{
return start + 1;
}
}
当我在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 );
之后不久死掉并检查db时,它可以工作,但是回到编辑帖子页面后,它恢复了。
基本上,它正在更新post meta,但之后,还有另一个默认的wordpress函数运行并将其重置为旧值。
任何专家建议,为什么会这样?
答案 0 :(得分:1)
问题在于,钩子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