保存 Post 并添加 Post 元执行两次
Save Post and Add Post Meta Executing Twice
我试图在保存 post 时添加或更新两个 post 元数据。如果它是新的 post 则添加,如果存在则更新,但此函数在数据库中创建四个而不是两个元。
add_action( 'save_post', 'add_rewards');
global $WCFM, $WCFMmp;
function add_rewards ($product_id){
if($product_id){
$post_type = get_post_type($product_id);
if($post_type == 'product'){
$product = wc_get_product( $product_id );
$reg_price = $product->get_regular_price();
$sal_price = $product->get_sale_price();
$pric = $product->get_price();
add_post_meta($product_id,'main_reward', $reg_price);
add_post_meta($product_id,'sub_reward', $sal_price);
}
}
}
正如 save_post
手册中所解释的那样,您应该使用 save_post_{$post->post_type}
来最小化对其他 post 类型的 save_post 调用。检查自动保存也是一个好主意。
此外,如果您使用 update_post_meta
而不是 add_post_meta
,您最终将只得到每个实例的一个实例。正如它在该功能的手册中所解释的那样,它说:
If the meta field for the post does not exist, it will be added and its ID returned.
Can be used in place of add_post_meta().
add_action( 'save_post_product', 'so71077799_add_rewards', 99, 1 );
function so71077799_add_rewards( $product_id ) {
// Check to see if we are autosaving, if so, exit.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( isset( $_POST['_regular_price'] ) ) {
update_post_meta( $product_id, 'main_reward', number_format( floatval( $_POST['_regular_price'] ), '2' ) );
}
if ( isset( $_POST['_sale_price'] ) ) {
update_post_meta( $product_id, 'sub_reward', number_format( floatval( $_POST['_sale_price'] ), '2' ) );
}
}
我试图在保存 post 时添加或更新两个 post 元数据。如果它是新的 post 则添加,如果存在则更新,但此函数在数据库中创建四个而不是两个元。
add_action( 'save_post', 'add_rewards');
global $WCFM, $WCFMmp;
function add_rewards ($product_id){
if($product_id){
$post_type = get_post_type($product_id);
if($post_type == 'product'){
$product = wc_get_product( $product_id );
$reg_price = $product->get_regular_price();
$sal_price = $product->get_sale_price();
$pric = $product->get_price();
add_post_meta($product_id,'main_reward', $reg_price);
add_post_meta($product_id,'sub_reward', $sal_price);
}
}
}
正如 save_post
手册中所解释的那样,您应该使用 save_post_{$post->post_type}
来最小化对其他 post 类型的 save_post 调用。检查自动保存也是一个好主意。
此外,如果您使用 update_post_meta
而不是 add_post_meta
,您最终将只得到每个实例的一个实例。正如它在该功能的手册中所解释的那样,它说:
If the meta field for the post does not exist, it will be added and its ID returned. Can be used in place of add_post_meta().
add_action( 'save_post_product', 'so71077799_add_rewards', 99, 1 );
function so71077799_add_rewards( $product_id ) {
// Check to see if we are autosaving, if so, exit.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( isset( $_POST['_regular_price'] ) ) {
update_post_meta( $product_id, 'main_reward', number_format( floatval( $_POST['_regular_price'] ), '2' ) );
}
if ( isset( $_POST['_sale_price'] ) ) {
update_post_meta( $product_id, 'sub_reward', number_format( floatval( $_POST['_sale_price'] ), '2' ) );
}
}