Ici, le code vous permet de donner un accès aux prix « professionnels » et prix « promotion pour professionnel » pour des articles mis en vente pour des clients classiques et des clients professionnels. Ce « hack » vous épargne l’installation et la mise à jour de deux plugins.
Dans fonctions.php (création du rôle « professionnel »)
// création d'un rôle Pro function custom_role(){ $customer_roles = get_role( 'customer' )->capabilities; $new_role = 'client_pro'; $display_name = 'Client professionnel'; add_role( $new_role, $display_name, $customer_roles ); } add_action( 'init', 'custom_role', 10);
Dans fonctions.php (création des deux champs « custom field » pour les prix – prix professionnels et promotions professionnels )
// ajout de l'option prix et promo pour les clients professionnels add_action( 'woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields' ); function woocommerce_product_custom_fields () { global $woocommerce, $post; echo '<div class=" product_custom_field ">'; woocommerce_wp_text_input( array( 'id' => '_custom_customer_price_field', 'label' => __('Prix professionnels ('. get_woocommerce_currency_symbol() .')', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => 0, ) ) ); woocommerce_wp_text_input( array( 'id' => '_custom_customer_sale_field', 'label' => __('Prix pro promo ('. get_woocommerce_currency_symbol() .')', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => 0, ) ) ); echo '</div>'; } add_action( 'woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save' ); function woocommerce_product_custom_fields_save($post_id){ $woocommerce_custom_customer_price_field = $_POST['_custom_customer_price_field']; if (!empty($woocommerce_custom_customer_price_field)){ update_post_meta($post_id, '_custom_customer_price_field', esc_attr($woocommerce_custom_customer_price_field)); }else{ delete_post_meta( $post_id, '_custom_customer_price_field', esc_attr($woocommerce_custom_customer_price_field)); } $woocommerce_custom_customer_sale_field = $_POST['_custom_customer_sale_field']; if (!empty($woocommerce_custom_customer_sale_field)){ update_post_meta($post_id, '_custom_customer_sale_field', esc_attr($woocommerce_custom_customer_sale_field)); }else{ delete_post_meta( $post_id, '_custom_customer_sale_field', esc_attr($woocommerce_custom_customer_sale_field)); } }
Dans fonctions.php (gestion de l’affichage des prix )
//gestion de l'affichage des prix add_filter( 'woocommerce_product_variation_get_price', 'regular_pro_price', 10, 2 ); add_filter( 'woocommerce_product_get_regular_price', 'regular_pro_price', 10, 2 ); add_filter( 'woocommerce_product_get_price', 'pro_price', 10, 2 ); add_filter( 'woocommerce_product_get_sale_price', 'pro_sale_price', 10, 2 ); function regular_pro_price( $price, $product ) { global $post; $user = wp_get_current_user(); if ( in_array( 'client_pro', (array) $user->roles ) ) { $sale_price = get_post_meta( $post->ID, '_custom_customer_price_field', true ); if(!empty($sale_price)){ $price = $sale_price; } } return $price; } function pro_price( $price, $product ) { global $post; $user = wp_get_current_user(); if ( in_array( 'client_pro', (array) $user->roles ) ) { $sale_price = get_post_meta( $post->ID, '_custom_customer_sale_field', true ); if(!empty($sale_price)){ $price = $sale_price; }else{ $sale_price = get_post_meta( $post->ID, '_custom_customer_price_field', true ); if(!empty($sale_price)){ $price = $sale_price; } } } return $price; } function pro_sale_price( $price, $product ) { global $post; $user = wp_get_current_user(); if ( in_array( 'client_pro', (array) $user->roles ) ) { $sale_price = get_post_meta( $post->ID, '_custom_customer_sale_field', true ); if(!empty($sale_price)){ $price = $sale_price; }else{ $pro_price = get_post_meta( $post->ID, '_custom_customer_price_field', true ); if(!empty($pro_price)){ $price = ''; } } } return $price; }