首页 > 解决方案 > 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 函数运行并将其重置为旧值。

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

标签: phpwordpresspost-meta

解决方案


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


推荐阅读