我正试图在帖子的元数据中编辑一个字段,然后才会在屏幕上显示。
我一直在查看'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
}
这是正确的方法吗?
答案 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
}
}