更改 WooCommerce 价格显示

Change WooCommerce price display

请允许我提供更多信息,希望对您有所帮助。

目标:

  1. 自定义商店页面
  2. 使某些类别的产品不可购买
  3. 隐藏变量产品的价格范围,价格仅在选中时显示
  4. 更改商店页面上的价格显示(与第 1 点有关,尤其是价格,我创建了一个具有自定义价格值的属性 - 'pa_harga')

已完成:
---第1点的代码---

add_action('woocommerce_loop_add_to_cart_link','displaying_product_attributes',5);
function displaying_product_attributes () {
global $product;

$tipe_iklan_val = $product->get_attribute('pa_tipe-iklan');

$title_val = $product->get_title();

$harga_val = $product->get_attribute('pa_harga');

$harga2_val = $product->get_price_html();

$kt_val = $product->get_attribute('pa_kt');
$km_val = $product->get_attribute('pa_km');

$luas_bangunan_val = $product->get_attribute('pa_luas-bangunan');
$luas_tanah_val = $product->get_attribute('pa_luas-tanah');

$kelurahan_val = $product->get_attribute('pa_kelurahan');
$area_val = $product->get_attribute('pa_area');
    
$sku_val = $product->get_sku();


echo "<p style='color:#000; margin-left:5px; text-align:center; font-size:16px; height:24px; border:1px solid transparent; background-color:#e4e4e4; border-radius:5px; width:fit-content; width:-moz-fit-content; font-weight:600;padding-top:3px; padding-left:10px;padding-right:10px; margin-top:5px; letter-spacing:1.1px; box-shadow: 0px 0px 4px 1.5px rgb(0 0 0 / 0.8);'>".str_replace(',',' atau', $product->get_attribute .$tipe_iklan_val)."</p>";

echo "<h2 style='font-size:16px; margin-left:5px;text-overflow: ellipsis;overflow:hidden;white-space:nowrap;'>".$title_val."</h2>"; 

echo "<p style='color:#1ebf41; text-align:left;margin-left:6px; padding-top:10px; font-size:18px;line-height:0.9; font-weight:bold'>".$harga_val."</p>";

echo "<p style='color:#1ebf41; text-align:left;margin-left:6px; padding-top:10px; font-size:18px;line-height:0.9; font-weight:bold'>".$harga2_val."</p>";


echo "<p style='color:#333; text-align:left;margin-left:7px;font-size:14px;line-height: 0.1;'><i class='fas fa-bed'></i> &nbsp;".$kt_val."&emsp;<i class='fas fa-shower'></i> &nbsp;".$km_val."&emsp;<i class='fa fa-home'></i>&nbsp; ".$luas_bangunan_val."m<sup>2</sup>&emsp;<i class='fas fa-expand-arrows-alt'></i>&nbsp; ".$luas_tanah_val."m<sup>2</sup></p>";

echo "<p style='color:#333; text-align:left; margin-left:7px;font-size:14px;line-height: 1;'><i class='fas fa-map-marker-alt'></i>&nbsp; ".$kelurahan_val.",&nbsp;".$area_val."</p>";

echo "<p style='color:#333; text-align:left;margin-left:7px; font-size:14px;line-height: 0.8;'>ID : ".$sku_val."</p>";
}

查看结果 > Point 1

---点2的代码---

add_filter('woocommerce_is_purchasable','misha_catalog_mode_on_for_category',10, 2 );
function misha_catalog_mode_on_for_category( $is_purchasable, $product {

if( has_term( 'sold', 'product_cat', $product->get_id() ) ) {
return false;
}

return $is_purchasable;

}
add_filter( 'woocommerce_variable_sale_price_html','woocommerce_remove_prices', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'woocommerce_remove_prices', 10, 2 );
add_filter( 'woocommerce_get_price_html', 'woocommerce_remove_prices', 10, 2 );
function woocommerce_remove_prices( $price, $product ) {
if( is_product_category('sold') || has_term( 'sold', 'product_cat',$product->get_id() ) )
$price = '';

return $price;  
}
add_action( 'woocommerce_single_product_summary','unavailable_product_display_message', 20 );
function unavailable_product_display_message() {
global $product;

if(! $product->is_purchasable() ){
echo '<p style="color:#e00000;font-size:20px;font-weight:600; font-family:verdana;">' . __("Unit telah terjual/Disewa.") . '</p>';
echo '<p style="background-color: #fff5ee; padding-top:6px; text-align:center; border: 1px solid transparent; border-radius: 8px; width: 250px; height: 40px; margin-left: 20px;font-size:15px;box-shadow:0px -2px 6px 0px rgb(210 0 1)"><a style="color: black;"href="http://www.wajaraja.com/hubungi-kami/">Tinggalkan pesan di sini</a></p>';
}
}

查看结果 > Point 2

---点3的代码---

//Hide Price Range for WooCommerce Variable Products
add_filter('woocommerce_variable_sale_price_html','lw_variable_product_price', 10, 2 );
add_filter( 'woocommerce_variable_price_html','lw_variable_product_price', 10, 2 );

function lw_variable_product_price( $v_price, $v_product ) {

// Product Price
$prod_prices = array( $v_product->get_variation_price( 'min', true ), 
$v_product->get_variation_price( 'max', true ) );
$prod_price = $prod_prices[0]!==$prod_prices[1] ? sprintf(__('Harga terendah : %1$s', 'woocommerce'), 
wc_price( $prod_prices[0] ) ) : wc_price( $prod_prices[0] );

// Regular Price
$regular_prices = array( $v_product->get_variation_regular_price( 'min',true ), 
$v_product->get_variation_regular_price( 'max', true ) );
sort( $regular_prices );
$regular_price = $regular_prices[0]!==$regular_prices[1] ?
sprintf(__('Harga terendah : %1$s','woocommerce'), wc_price( $regular_prices[0] ) ) : wc_price( $regular_prices[0] );

if ( $prod_price !== $regular_price ) {
$prod_price = '<del>'.$regular_price.$v_product->get_price_suffix() . '</del> <ins>' . 
$prod_price . $v_product->get_price_suffix() . '</ins>';
}
return $prod_price;
}


//Hide “From:$X”
add_filter('woocommerce_get_price_html', 'lw_hide_variation_price', 10, 2);
function lw_hide_variation_price( $v_price, $v_product ) {

$v_product_types = array( 'variable');
if ( in_array ( $v_product->product_type, $v_product_types ) && !(is_shop()) ) {
return '';
}
// return regular price
return $v_price;
}

查看结果 > Point 3 - before || Point 3 - After

---第4点的代码---

add_filter( 'woocommerce_get_price_html','rei_woocommerce_price_html', 9999, 2 );

function rei_woocommerce_price_html( $price, $product ) {
$currency = get_woocommerce_currency_symbol( );
$price = $currency . custom_number_format( floatval($product->get_price() ), 0 );
return $price;
}
function custom_number_format( $n, $precision = 0 ) {
if ( $n < 1000 ) {
    // Default
    $n_format = number_format( $n );
} elseif ( $n < 1000000 ) {
    // Thousand
    $n_format = number_format( $n / 1000, $precision ) . ' Ribu';
} elseif ( $n < 1000000000 ) {
    // Million
    $n_format = number_format( $n / 1000000, $precision ) . ' Juta';
} else if ( $n < 1000000000000 ) {
    // Billion
    $n_format = number_format( $n / 1000000000, $precision ) . ' M';
} else {
    // Trillion
    $n_format = number_format( $n / 1000000000000, $precision ) . ' T';
}
return $n_format;
}

(看对比,我没有去掉属性product > Top price position建的价格)

注意:代码运行良好。但是我无法设置条件为千(Ribu)、百万(Juta)、M 或 T 时出现多少个数字。

查看结果 > Point 4

我要:

798,500,000 印尼盾 > 798,5 印尼盾
925,799,000 印尼盾 > 925,8 印尼盾
535,000,000 印尼盾 > 535 印尼盾
1,000,000,000 印尼盾 > 1 M 印尼盾
Rp。 1,050,000,000 > Rp 1,05 M
Rp。 2,539,000,000 > 卢比。 2,54 米

所以我做了一点修改,这是代码(如果我错了请纠正我)

---代码点 4 > 修改---

add_filter( 'woocommerce_get_price_html','rei_woocommerce_price_html', 9999, 2 );
if (!is_shop()) return;
function rei_woocommerce_price_html( $price, $product ) {

$currency = get_woocommerce_currency_symbol( );
$price = $currency .' ' .custom_number_format( floatval( $product->get_price() ), 2 );
return $price;

}



     $n = 1000000;

    function custom_number_format($n) {

        $n = (0+str_replace(",","",$n));


        if(!is_numeric($n)) return false;


        if($n>1000000000000) return round(($n/1000000000000),1).' '.'-T';
        else if($n>1000000000) return round(($n/1000000000),2).' '.'M';
        else if($n>1000000) return round(($n/1000000),3).' '.'Juta';
        else if($n>1000) return round(($n/1000),1).' '.'Ribu';

        return number_format($n);
    }

     $v = custom_number_format($n);
    echo  $v;

查看结果 > Point 4 - revise

至此我觉得我达到了目标。
但是当我浏览每个产品时,我觉得有些地方不对劲,需要修复。
代码点 2 和 3 无法正常工作。第 4 点和第 4 点修改的附加代码带回了本应隐藏的价格。
这是添加代码点 4 后的样子

查看结果 > Related with point 2 || Related with point 3

请帮助我,以便在不改变现有内容的情况下实现第 4 点的目标。

为您清理了一下,并更换了过滤器:

add_filter( 'woocommerce_get_price_html','rei_woocommerce_price_html', 9999, 2 );

function rei_woocommerce_price_html( $price, $product ) {
    $currency = get_woocommerce_currency_symbol( );
    $price = $currency . custom_number_format( floatval( $product->get_price() ), 0 );
    return $price;
}

function custom_number_format( $n, $precision = 0 ) {
    if ( $n < 1000 ) {
        // Default
        $n_format = number_format( $n );
    } elseif ( $n < 1000000 ) {
        // Thousand
        $n_format = number_format( $n / 1000, $precision ) . ' Ribu';
    } elseif ( $n < 1000000000 ) {
        // Million
        $n_format = number_format( $n / 1000000, $precision ) . ' Juta';
    } else if ( $n < 1000000000000 ) {
        // Billion
        $n_format = number_format( $n / 1000000000, $precision ) . ' M';
    } else {
        // Trillion
        $n_format = number_format( $n / 1000000000000, $precision ) . ' T';
    }
    return $n_format;
}