WordPress发布更新不通过WordPress钩子更新postmeta

时间:2019-05-01 13:02:43

标签: php wordpress post-meta

我想通过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函数运行并将其重置为旧值。

任何专家建议,为什么会这样?

1 个答案:

答案 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