Estoy tratando de agregar o actualizar dos publicaciones meta al guardar una publicación. Agregue si es una publicación nueva y actualice si existe, pero esta función crea cuatro en la base de datos en lugar de dos meta.
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); } } }Como se explica en el manual de save_post , debe usar save_post_{$post->post_type} que minimiza las llamadas a save_post en otros tipos de publicaciones. También es una buena idea verificar el autoguardado.
Además, si usa update_post_meta en lugar de add_post_meta , terminará con solo una instancia de cada uno. Como explica en el manual de esa función, dice:
Si el metacampo de la publicación no existe, se agregará y se devolverá su ID. Se puede usar en lugar de 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' ) ); } }