همینو با تغییراتی که میدونید برای تومان به میلیون تومان هم باز استفاده کردم ولی کار نمیکنه، اعشار هم در تنظیمات واحد پولی ووکامرس برداشتم، سپریتور(مجزاکنندۀ) “سه رقم سه رقم” هم حذف کردم؛ درحالات مختلف هم تست کردم.
هیچ تغییری نمیکنه متأسفانه و کماکان به همون صورتی نشون میده که در پیکربندی ووکامرس، واحد پولیو هرچی انتخاب کنیم همونو نشون میده و اصلاً انگار نه انگار فانکشنو تغییر میدیم
افزونه های بی ربط دیگه هم حتی غیر فعال کردم بازم حل نشد
کسی میدونه مشکل از کجاست؟
سلام وقت بخیر
دلیل اینکه کدهای شما تغییری در خروجی صفحات اعمال نمی کنه اینه که woocommerce_currency_symbol گزینه مناسبی برای کاری که شما می خواهید انجام بدهید نیست
لطفا قطعه کد زیر رو به انتهای فایل functions.php اضافه کنید:
class ToPersian
{
public static $string = '';
public static $separator = 'و ';
public static function calculator($amount): string
{
if ($amount > 1000000000) {
self::resolver($amount, 1000000000, 'میلیارد');
}
elseif ($amount > 1000000 && $amount < 1000000000) {
self::resolver($amount, 1000000, 'میلیون');
}
else {
$r = floor($amount / 1000);
static::$string .= "$r هزار تومان";
}
return self::$string;
}
public static function resolver($amount, $base, $persianBase)
{
$a = $amount / $base;
$s = floor($a);
$separator = self::$separator;
static::$string .= "$s $persianBase $separator";
$b = (($a - $s) * $base);
self::calculator($b);
}
}
function sv_change_product_price_display($priceHtml): string
{
// $priceHtml formatted by woo
global $product;
return '<span class="woocommerce-Price-amount amount">' . ToPersian::calculator($product->get_price()) . '</span>';
}
add_filter( 'woocommerce_get_price_html', 'sv_change_product_price_display' );
سلام
وقت بخیر
ممنون از شما
کد جالبی بود چون حداقل یه تغییری بالاخره توی خروجیِ قیمتهای فروشگاه از خودش نشون داد
ولی جالبتر اینجا بود که قیمتهارو اینطوری نشون میده:
1 میلیون و 500 هزار تومان0 هزار تومان
1 میلیون و 500 هزار تومان0 هزار تومان0 هزار تومان0 هزار تومان
1 میلیون و 500 هزار تومان0 هزار تومان0 هزار تومان0 هزار تومان3 میلیون و 0 هزار تومان
1 میلیون و 500 هزار تومان0 هزار تومان0 هزار تومان0 هزار تومان3 میلیون و 0 هزار تومان1000 هزار تومان
و الی آخر!!!
پس اینهم نهایتاً به کار نمیاد ولی خوبیش اینه که حداقل یه بخاری از خودش نشون داد، کدهای قبلی اصلاً در خروجی تغییری ایجاد نمیکردن
یعنی به محصولی که حتی هیچ قیمتی هم نداره و برچسب تماس بگیرید داره قیمتشو اینطوری نشون میده:
“1 میلیون و 500 هزار تومان0 هزار تومان”
سلام مجدد
واقعیتش من خیلی روی جزییات کار دقت نکردم و فقط صفحه single محصول رو چک کردم
این مشکل در صفحات لیست به وجود میاد
برای حل این مشکل شما کافیه کد زیر رو جایگزین کنید.
الآن یک محصولی که قیمتش 100هزارتومانه، داره “0 هزار تومان” نشون میده
یا مثلاً یه محصولی که قیمتش 3میلیون تومان بوده رو اینطوری نشون میده: “3 میلیون و 0 هزار تومان”
یا مثلاً یه محصولی که با پایه پولی ووکامرسِ تومان، مبلغشو " ۱,۰۰۰,۰۰۰ تومان" نشون میده، با این کد تبدیل میشه به “1000 هزار تومان” که طبیعتاً تبدیلش یا فهمش برای خریدار مشکله.
یعنی درواقع اگر بخوایم از این کد استفاده کنیم فقط درصورتی همه چیزو درست نشون میده که اولاً قیمتهامون بالای یک میلیون تومان باشن ثانیاً حتماً خورده داشته باشن تا مثلاً ننویسه “3 میلیون و 0 هزار تومان”
مابقی موارد درسته، پایه پولی تومان بذاریم ووکامرسو درست به درگاه پرداخت منتقل میشه ولی فقط مشکل کماکان در نمایش قیمتهاست.
ولی الحق و الانصاف درود بیکران بر شما که انقدر ریزبین هستین و کارتون درسته
قیمتو که میزنیم 1300000، درست نشون میده
ولی اگه قیمتهای زوج باشه رقم خوردش، مثل 1میلیون و 200هزارتومان، اینطوری نشون میده: “1 میلیون و 199 هزار تومان”
یا اگه قیمت 1میلیون و 400هزارتومان بزنیم در محصول، اینطوری نشون میده: “1 میلیون و 399 هزار تومان”
ولی 1300000تومانو درست نشون میده: “1 میلیون و 300 هزار تومان” یا مثلاً 1700000تومانو درست نشون میده: “1 میلیون و 700 هزار تومان”
1800000تومانم درست نشون میده: “1 میلیون و 800 هزار تومان”
ولی 1میلیونو900هزارتومانو اینطوری نشون میده:“1 میلیون و 899 هزار تومان”؛ جالب اینجاست که اومدیم خودمون 1000تومان اضافه کردیم به مبلغ محصول و زدیم 1901000تومان، چیزی که نشون داد درست بود!!!: “1 میلیون و 901 هزار تومان”
حالا اگه قیمتو بزنیم 2900000تومان، اینطوری نشون میده: “2 میلیون و 899 هزار تومان”
جالب اینجاست که برخی از این اتفاق برای بالای 2میلیون تومان نمیافته و شرایط بهتره، یعنی اگر قیمت 2200000تومان باشه نشون میده: “2 میلیون و 200 هزار تومان” که درسته، درصورتیکه همین رقم اگر 1200000تومان بود اینطوری نشون میده: “1 میلیون و 199 هزار تومان”
یا اگر 1220000تومان باشه نشون میده: “1 میلیون و 219 هزار تومان”
حالا اگه همین بشه 2220000تومان، دقیقاً درست نشون میده:“2 میلیون و 220 هزار تومان”
یا اگه بزنیم 3300000تومان، نشون میده: “3 میلیون و 299 هزار تومان”
حتی اگه خورده هم داشته باشه درست نشون میده مثلاً 1550هزارتومانو درست نشون میده: “1 میلیون و 550 هزار تومان”
یه مشکل دیگه اینکه اگر قیمت محصولی دقیقاً 1000000تومان(یک میلیون تومان) باشه، فقط نشون میده: " تومان"؛ ولی این قضیه برای 2میلیون تومان به بالا درسته و “2 میلیون تومان” نشون میده.
درواقع الآن همه چیز تقریباً عالیه درصورتیکه قیمتها بالای 1میلیون تومان باشه
البته قیمتهای زیر یک میلیون تومان هم همه چیزش درسته
با این اوصاف، شما در این الگو متوجه قاعدۀ خاصی شدین؟
الحق و الانصاف اگه سون هاست چنین کارمندای مسلطی به بکاند و فرانتاند داره باید بهش دستمریزاد گفت
این کدی که شما زدی خودش 3واحد کلاس آموزشیه
خداییش داخل فروم ووکامرسم نتونستن به این قشنگی حلش کنن، جالب بود کارتون واقعاً
حتی از سایت هدف هم بهتر درومد نتیجۀ کار مختصر و مفید
کاملاً درست کار کرد
در همۀ حالتها درست کار کرد
اعلا میشد اگر اعدادم فارسی نشون میداد، چون دیفالت ووکامرس که روی اعداد فارسیه رو بایپس میکنه انگار
البته درکل دَم شما گرم واقعاً دست مریزاد به سون هاست با یه چنین پرسنلی، انصافاً از صمیم قلب خداقوت
شما لطف دارید خیلی ممنون
برای اعداد فارسی پیشنهاد میکنم به جای درگیر کردن بک اند روی این مسئله از یک فونت فارسی استفاده کنید که اعداد رو بصورت فارسی نمایش بده
که اغلب فونت های پدر مادر دار مثل iran sans نسخه مخصوص برای عدد های فارسی رو هم دارن
موفق باشید
سلام و خسته نباشید
این کد رو که تست کردم خروجی اوکی بود فقط اگر محصول قیمت ویژه داشته باشه دیگه اون قیمت ویژه که معمولا خط میخوره رو نمایش نمیده متاسفانه
به نظرتون اگر با جاواسکریپت تابعی ران کنیم که داخل فرانت این تغییرو اعمال کنه غیر اصولی هست؟