Sur WooCommerce, je souhaite modifier la présentation de page Variable pour un seul produit. Parce que, lorsque vous avez un produit variable, vous obtenez cette rage de prix câblée (sous le titre du produit) sur la page Produit variable et elle apparaît également sur la page de la boutique.
Pour moi, la méthode standard consiste à afficher le prix le plus bas du produit dans la boutique ainsi que la page du produit et à modifier ce prix en fonction des variables sélectionnées par l'utilisateur. Je ne peux pas croire pourquoi.
Je peux supprimer la fourchette de prix et afficher le prix le plus bas à l'aide de cet extrait de code.
https://businessbloomer.com/disable-variable-product-price-range-woocommerce/
Mais là encore, le prix le plus bas ne change pas en fonction des variables sélectionnées. Il y a encore deux prix dans la disposition du produit variable. Ceci est ma mise en page de produit variable actuelle
http://www.preorders.lk/product/beats-solo3-wireless-on-ear-headphones/
Alors, est-ce que quelqu'un peut, s'il vous plaît, aider à supprimer la gamme de prix de la page de produit variable et ne montrer qu'un prix le plus bas (sous le titre du produit) du produit par défaut. Ce prix devrait donc être modifié en fonction des variables dont dispose ce produit. Et ce prix le plus bas devrait également figurer sur la page de la boutique.
J'espère que c'est clair. S'il vous plaît laissez-moi savoir si quelque chose n'est pas clair. Veuillez vous référer à l'image ci-jointe pour plus de détails.
Merci.
Nouvelle mise à jour améliorée dans le fil suivant (June 2018):
Remplacer la variation par défaut du traitement de la fourchette de prix affiché dans Woocommerce 3
Mise à jour (décembre 2017): à éviter, problèmes concernant les produits non variables dans certains thèmes et un bogue de disponibilité de répétition dans certains thèmes.
Note: Certains plugins comme le marché allemand ou certains thèmes ne fonctionneront pas avec ce code, car ils apportent leurs propres modifications dans les crochets ou dans la structure html.
C'est tout à fait possible.
jQuery
, lorsque nous obtenons le prix de variation choisi, nous remplaçons le prix variable (et affichons la disponibilité des stocks). Voici ce code:
add_action( 'woocommerce_before_single_product', 'move_variations_single_price', 1 );
function move_variations_single_price(){
global $product, $post;
if ( $product->is_type( 'variable' ) ) {
// removing the variations price for variable products
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
// Change location and inserting back the variations price
add_action( 'woocommerce_single_product_summary', 'replace_variation_single_price', 10 );
}
}
function replace_variation_single_price(){
global $product;
// Main Price
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Sale Price
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice && $product->is_on_sale() ) {
$price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
}
?>
<style>
div.woocommerce-variation-price,
div.woocommerce-variation-availability,
div.hidden-variable-price {
height: 0px !important;
overflow:hidden;
position:relative;
line-height: 0px !important;
font-size: 0% !important;
}
</style>
<script>
jQuery(document).ready(function($) {
$('select').blur( function(){
if( '' != $('input.variation_id').val() ){
if($('p.availability'))
$('p.availability').remove();
$('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>');
console.log($('input.variation_id').val());
} else {
$('p.price').html($('div.hidden-variable-price').html());
if($('p.availability'))
$('p.availability').remove();
console.log('NULL');
}
});
});
</script>
<?php
echo '<p class="price">'.$price.'</p>
<div class="hidden-variable-price" >'.$price.'</div>';
}
Le code va dans n'importe quel fichier php de votre thème enfant actif (ou thème) ou aussi dans n'importe quel fichier plugin php.
Ce code est testé et fonctionne sur WooCommerce 3.2.x (devrait également fonctionner sur WooCommerce 2.6.x))}
Vous pouvez éventuellement déplacer le CSS (
<style></style>
) dans le fichierstyles.css
de votre thème enfant actif (ou thème actif), puis le supprimer de cette fonction…
En relation:
Je suis conscient que je ressuscite un ancien fil ici, mais quelque chose que j'ai découvert en utilisant ce code est que vous devez savoir qu'avec ce code, vous risquez d'empêcher des prix uniques et non variables de s'afficher sur certains thèmes comme:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
est déclenchée sur toutes les pages de produits, qu’il s’agisse d’un produit variable ou non.
Vous pouvez utiliser la version ci-dessous qui vérifie simplement si le produit actuel est variable ou non avant d'exécuter le reste du code.
add_action( 'woocommerce_before_single_product', 'check_if_variable_first' );
function check_if_variable_first(){
if ( is_product() ) {
global $post;
$product = wc_get_product( $post->ID );
if ( $product->is_type( 'variable' ) ) {
// removing the price of variable products
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
// Change location of
add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 );
function custom_wc_template_single_price(){
global $product;
// Variable product only
if($product->is_type('variable')):
// Main Price
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Sale Price
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice && $product->is_on_sale() ) {
$price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
}
?>
<style>
div.woocommerce-variation-price,
div.woocommerce-variation-availability,
div.hidden-variable-price {
height: 0px !important;
overflow:hidden;
position:relative;
line-height: 0px !important;
font-size: 0% !important;
}
</style>
<script>
jQuery(document).ready(function($) {
$('select').blur( function(){
if( '' != $('input.variation_id').val() ){
$('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>');
console.log($('input.variation_id').val());
} else {
$('p.price').html($('div.hidden-variable-price').html());
if($('p.availability'))
$('p.availability').remove();
console.log('NULL');
}
});
});
</script>
<?php
echo '<p class="price">'.$price.'</p>
<div class="hidden-variable-price" >'.$price.'</div>';
endif;
}
}
}
}