Wordpress post 更新未通过 wordpress 钩子更新 postmeta

Wordpress post update not updating postmeta by wordpress hook

我想通过 wordpess 挂钩为 post 更新 post 元值,但我无法更新它。这是我的代码,

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 页面后,它恢复了。

基本上它正在更新 post meta 但在它之后,还有另一个默认的 wordpress 函数 运行 并将其重置为旧值。

请教高手,为什么会这样??

问题是因为挂钩 post_updated 在 post 的元数据实际保存之前触发。

所以基本上您更新了 post 的元数据,然后 post 立即更新为请求中提交的元数据值。

为了解决这个问题,你可以使用 save_post 挂钩的高编号优先获得挂钩 运行 last:

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