WooCommerceでは、Variable single product page layoutを変更したいと思います。なぜなら、可変製品がある場合は、可変製品ページでこの有線価格の範囲(製品タイトルの下)を取得し、ショップページにも表示されるからです。
私にとって標準的な方法は、ショップと製品ページで製品の最低価格を表示し、変数のユーザー選択に従ってその価格を変更することです。信じられない。
このコードスニペットを使用して、価格帯を削除し、最低価格を表示できます。
https://businessbloomer.com/disable-variable-product-price-range-woocommerce/
しかし、再び、その最低価格は選択した変数に応じて変化しません。可変製品レイアウトには再び2つの価格があります。これは現在の可変製品ページのレイアウトです
http://www.preorders.lk/product/beats-solo3-wireless-on-ear-headphones/
だから、誰でも可変製品ページから価格帯を削除し、デフォルトとして製品の最低価格を1つだけ(製品タイトルの下に)表示するのを手伝ってください。そのため、その製品が持つ変数に応じて価格を変更する必要があります。また、その最低価格もショップページに表示する必要があります。
これが明確であることを願っています。不明な点がある場合はお知らせください。詳細については、添付の画像を参照してください。
ありがとう。
次のスレッドの新しい改善された更新(2018年6月):
(2017年12月):を更新して、一部のテーマおよび繰り返しでの非可変製品に関する問題いくつかのテーマの可用性バグ
注:ドイツ市場のようなプラグインやテーマは機能しませんこのコードでは、フックまたはhtml構造に独自の変更を加えるためです。
これは完全に可能です。
jQuery
スクリプトを使用して、選択した変動価格を取得したら、可変価格を置き換えます(そして在庫状況を表示します) )。そのコードは次のとおりです。
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>';
}
コードは、アクティブな子テーマ(またはテーマ)のphpファイル、またはプラグインphpファイルにも含まれます。
このコードはテストされており、WooCommerce 3.2.xで動作します(WooCommerce 2.6.xでも動作するはずです)
オプションでCSSを移動できます(
<style></style>
)からstyles.css
アクティブな子テーマ(またはアクティブなテーマ)のファイルを作成し、この関数から削除します…
関連:
私はここで古いスレッドを復活させていることを知っていますが、このコードを使用するときに発見したことは、このコードを使用すると、いくつかのテーマに表示される単一の非変動価格を停止するリスクがあることに注意する必要があることです:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
可変製品であるかどうかに関係なく、すべての製品ページでトリガーされます。
以下のバージョンを使用すると、残りのコードを実行する前に、現在の製品が可変かどうかを確認するだけです。
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;
}
}
}
}