Wordpress钩子在显示帖子编辑页面之前编辑帖子元数据

时间:2017-02-27 10:24:17

标签: php wordpress hook edit

我正试图在帖子的元数据中编辑一个字段,然后才会在屏幕上显示。

我一直在查看'load-post.php'钩子,但这是在加载帖子之前调用的(如果我已经正确理解了),所以post id和meta数据为null。 我尝试了其他的钩子,但是我无法做到这一点。

以下帖子元字段需要在编辑页面上显示之前进行更改。

$post_price = get_post_meta(get_the_ID(), 'price', TRUE);

示例:数据库中的价格= 10,但我希望它在帖子编辑页面上显示时为Price = 15。

非常感谢任何链接,提示和想法。 :)

编辑:
我目前的解决方案:

add_action('load-post.php','calculate_price');
function calculate_price(){
    $post_id = $_GET['post'];
    //get price from post by post_id and do stuff
}

这是正确的方法吗?

2 个答案:

答案 0 :(得分:0)

编辑:好吧我认为你只需要使用帖子的ID。如果您需要更改post对象(已经从db加载并准备打印),则可以使用'the_post'代替。由于您只需要访问帖子ID,我会这样做:

function my_the_post_action( $post ) {
    $screen = get_current_screen();
    if( is_admin() && $screen->parent_base == 'edit' && get_post_type() == 'product' ) {
        $post_id = $post->ID;
        $price = (int) get_post_meta( $post_id, 'price', true );
        update_post_meta( $post_id, 'price', $price + 5 );
    } 
}
add_action( 'the_post', 'my_the_post_action' );

这部分:

  

get_post_type()=='产品'

不是必需的,但您应该确定要运行这段代码的帖子类型(基于帖子类型,类别,元字段等)。没有它将在管理查询中每次执行。如果出现问题,可以免费测试此代码。

答案 1 :(得分:0)

我发现最好的钩子是使用$current_screen的{​​{3}}。

对于Woocommerce产品,该方法有效:

add_action('load-post.php', "calculate_price" );

function calculate_price( ){
   global $current_screen;
   if( is_admin() && $current_screen->post_type === 'product' ){
       $post_id = (int) $_GET['post'];
       $post = get_post( $post_id );
       //Do something
   }
}