Să presupunem că dorești să aplici o reducere în procente de 10% la un produs WooCommerce. Prețul său inițial este de 79,56 Lei. Accesezi pagina „Editați produsul”, accesezi câmpul de introducere „Preț de vânzare” și introdui (79,56 Lei – 10%) = 71,63 Lei. Acest lucru este grozav, deoarece poți seta prețul de vânzare, dar acest lucru te obligă să faci niște calcule și să pierzi timpul. Ce se întâmplă dacă ar exista o listă derulantă de selectare personalizată, unde ai putea defini direct o reducere fixă, de ex. 10% sau 25%, fără a fi nevoie să calculezi prețul final?

Ei bine,mai jos, vom vedea cum putem afișa un meniu derulant în pagina Editare produs și, în același timp, cum să editam prețul de interfață odată ce este selectată o valoare de reducere, astfel încât să nu ai nevoie să faci acel calcul manual al prețului de vânzare.

Acest cod se instalează în functions.php al temei child din WordPress.

add_action( 'woocommerce_product_options_pricing', 'bbloomer_set_percentage_discount' );
 
function bbloomer_set_percentage_discount() {
   global $product_object;
   woocommerce_wp_select(
      array(
         'id' => '_pc_discount',
         'value' => get_post_meta( $product_object->get_id(), '_pc_discount', true ),
         'label' => 'Discount %',
         'options' => array(
            '0' => '0',
            '10' => '10',
            '25' => '25',
            '50' => '50',
         ),
      )
   );
}
 
add_action( 'save_post_product', 'bbloomer_save_percentage_discount' );
   
function bbloomer_save_percentage_discount( $product_id ) {
    global $typenow;
    if ( 'product' === $typenow ) {
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
      if ( isset( $_POST['_pc_discount'] ) ) {
            update_post_meta( $product_id, '_pc_discount', $_POST['_pc_discount'] );
        }
    }
}
  
add_filter( 'woocommerce_get_price_html', 'bbloomer_alter_price_display', 9999, 2 );
  
function bbloomer_alter_price_display( $price_html, $product ) {
    if ( is_admin() ) return $price_html;
    if ( '' === $product->get_price() ) return $price_html;
    if ( get_post_meta( $product->get_id(), '_pc_discount', true ) && get_post_meta( $product->get_id(), '_pc_discount', true ) > 0 ) {
        $orig_price = wc_get_price_to_display( $product );
        $price_html = wc_format_sale_price( $orig_price, $orig_price * ( 100 - get_post_meta( $product->get_id(), '_pc_discount', true ) ) / 100 );
    }
    return $price_html;
}
  
add_action( 'woocommerce_before_calculate_totals', 'bbloomer_alter_price_cart', 9999 );
  
function bbloomer_alter_price_cart( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
      if ( get_post_meta( $product->get_id(), '_pc_discount', true ) && get_post_meta( $product->get_id(), '_pc_discount', true ) > 0 ) {
           $price = $product->get_price();
           $cart_item['data']->set_price( $price * ( 100 - get_post_meta( $product->get_id(), '_pc_discount', true ) ) / 100 );
      }
    }
}
CALL BACK!
+
Sună-mă!
error: