Изменить отображение цен WooCommercePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Изменить отображение цен WooCommerce

Сообщение Anonymous »

Позвольте мне предоставить дополнительную информацию, и я надеюсь, что это поможет.

Цели:
  • Настроить страницу магазина.
  • Сделать товары недоступными для покупки для определенных категорий.
  • Скрыть диапазоны цен для переменных. Товар и цены отображаются только при выборе.
  • Изменить отображение цен на странице магазина (в связи с пунктом 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 "
".str_replace(',',' atau', $product->get_attribute .$tipe_iklan_val)."
";

echo "".$title_val."";

echo "
".$harga_val."
";

echo "
".$harga2_val."
";

echo "
[i][/i]  ".$kt_val." [i][/i]  ".$km_val." [i][/i]  ".$luas_bangunan_val."m2 [i][/i]  ".$luas_tanah_val."m2
";

echo "
[i][/i]  ".$kelurahan_val.", ".$area_val."
";

echo "
ID : ".$sku_val."
";
}
Смотреть результат > Пункт 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 '
' . __("Unit telah terjual/Disewa.") .  '
';
echo '
[url=http://www.wajaraja.com/hubungi-kami/]Tinggalkan pesan di sini[/url]
';
}
}
Смотреть результат > Пункт 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 = ''.$regular_price.$v_product->get_price_suffix() . ' ' .
$prod_price . $v_product->get_price_suffix() . '';
}
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;
}
См. результат > Точка 3 — до || Пункт 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;
}
(Чтобы увидеть сравнение, я не удалил цену, построенную по атрибуту «продукт» > «Лучшая ценовая позиция»)

Примечание: код работал нормально. Но у меня возникли проблемы с установкой количества отображаемых чисел, если это тысяча (Рибу), миллион (Юта), М или Т.
Смотрите результат > Пункт 4
Я хочу:

798 500 000 рупий > 798,5 рупий джута

925 799 000 рупий > 925,8 рупий джута

535 000 000 рупий > 535 рупий юта

1 000 000 000 рупий > 1 М рупий

Рп. 1 050 000 000 > 1,05 млн рупий

Рп. 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;
См. «Результат» > «Пункт 4 — пересмотр».
На этом этапе я чувствую, что достиг цели.

Но когда Я просмотрел каждый продукт и почувствовал, что что-то не так и это нужно исправить.

Точки кода 2 и 3 перестают работать должным образом. Дополнительный код из пунктов 4 и 4-пересмотра вернул цену, которая должна была быть скрыта.

Вот как это выглядит после добавления пункта 4 кода
Смотрите результат > Связано с пунктом 2 || Связано с пунктом 3.
Пожалуйста, помогите мне, чтобы цель пункта 4 могла быть достигнута без изменения того, что уже есть.

Подробнее здесь: https://stackoverflow.com/questions/694 ... ce-display
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»