وردپرس مقدماتی

فارسی‌سازی وردپرس و تاریخ شمسی؛ راهنمای کامل زبان، راست‌چین، فونت و تاریخ

فارسی سازی وردپرس و نمایش تاریخ شمسی

🗓 آخرین به‌روزرسانی:

وردپرس از همان ابتدا از زبان فارسی و چیدمان راست‌به‌چپ پشتیبانی می‌کند، اما برای اینکه یک سایت فارسی واقعاً «فارسی» به نظر برسد، چند کار دیگر هم لازم است: تاریخ‌ها باید شمسی باشند، فونت باید خوانا و فارسی باشد، منطقه زمانی باید درست تنظیم شود و قالب و افزونه‌ها باید ترجمه داشته باشند. در این راهنما همه این مراحل را قدم‌به‌قدم انجام می‌دهیم و برای تاریخ شمسی دو راه می‌گوییم: با افزونه و با یک کد کوچک PHP که خودمان آزموده‌ایم.

📚 این آموزش بخشی از آموزش جامع وردپرس است. اگر هنوز وردپرس نصب نکرده‌اید، وردپرس از صفر را ببینید.

مرحله ۱: تغییر زبان وردپرس به فارسی

  1. وارد پیشخوان شوید و به تنظیمات › عمومی (Settings › General) بروید.
  2. در فیلد زبان سایت (Site Language) گزینه فارسی را انتخاب کنید.
  3. دکمه ذخیره را بزنید. وردپرس بسته ترجمه فارسی را خودکار دانلود و نصب می‌کند و پیشخوان راست‌چین می‌شود.

اگر بعد از ذخیره هنوز انگلیسی ماند، احتمالاً سرور به مخزن ترجمه وردپرس دسترسی ندارد یا پوشه wp-content/languages قابل نوشتن نیست. از پیشخوان › به‌روزرسانی‌ها گزینه به‌روزرسانی ترجمه‌ها را امتحان کنید. توضیح بقیه گزینه‌های این صفحه در تنظیمات ضروری وردپرس آمده است.

زبان پیشخوان هر کاربر جداگانه

در کاربران › شناسنامه هر کاربر می‌تواند زبان پیشخوان خودش را جدا از زبان سایت انتخاب کند. مثلاً سایت فارسی بماند اما توسعه‌دهنده پیشخوان را انگلیسی ببیند تا پیغام‌های خطا را راحت‌تر جستجو کند. این قابلیت روی سطح دسترسی تأثیری ندارد؛ برای آن آموزش نقش‌های کاربری را بخوانید.

مرحله ۲: تنظیم منطقه زمانی

در همان صفحه تنظیمات عمومی، منطقه زمانی را روی تهران بگذارید، نه روی یک اختلاف ساعت ثابت مثل UTC+3:30. انتخاب نام شهر باعث می‌شود اگر قوانین ساعت تغییر کند، وردپرس با به‌روزرسانی پایگاه داده منطقه‌های زمانی خودش را تطبیق دهد. این تنظیم روی زمان انتشار نوشته‌های زمان‌بندی‌شده و تاریخ نمایش‌داده‌شده اثر مستقیم دارد. در بخش تاریخ شمسی خواهیم دید که منطقه زمانی اشتباه می‌تواند تاریخ نوشته‌های نیمه‌شب را یک روز جابه‌جا کند.

مرحله ۳: راست‌چین بودن قالب

وقتی زبان سایت فارسی باشد، وردپرس ویژگی dir="rtl" را به صفحه اضافه می‌کند و قالب‌هایی که فایل rtl.css دارند، خودکار راست‌چین می‌شوند. پیش از انتخاب قالب، در صفحه آن در مخزن وردپرس برچسب RTL Language Support را بررسی کنید. اگر قالبی بخش‌هایی را چپ‌چین نمایش داد، می‌توانید با CSS اضافی در نمایش › سفارشی‌سازی › CSS اضافی یا در ویرایشگر سایت اصلاحش کنید:

/* Additional CSS: fix a left-aligned box in an RTL site */
.rtl .my-box {
  text-align: right;
  direction: rtl;
}
/* keep code blocks left-to-right */
.rtl pre, .rtl code {
  direction: ltr;
  text-align: left;
}

قانون دوم مهم است: کد، آدرس وب و عبارت‌های انگلیسی طولانی باید چپ‌به‌راست بمانند تا نمادها جابه‌جا نشوند. نصب و انتخاب قالب را در نصب و به‌روزرسانی قالب وردپرس توضیح داده‌ایم.

مرحله ۴: فونت فارسی

فونت پیش‌فرض بسیاری از قالب‌ها برای حروف فارسی به فونت سیستم کاربر برمی‌گردد که روی دستگاه‌های مختلف ظاهر متفاوتی دارد. یک فونت فارسی متن‌باز و خوانا مثل وزیرمتن (Vazirmatn) انتخاب کنید. در قالب‌های بلوکی از نمایش › ویرایشگر › سبک‌ها › تایپوگرافی می‌توانید فونت را بارگذاری و برای کل سایت تعیین کنید؛ راهنمای کامل در سبک‌های سراسری، رنگ و فونت آمده است.

اگر فونت را خودتان روی هاست قرار می‌دهید، از فرمت WOFF2 استفاده کنید و فقط وزن‌هایی را بارگذاری کنید که واقعاً لازم دارید (مثلاً معمولی و ضخیم). هر وزن اضافه، حجم صفحه را بیشتر و سرعت سایت را کمتر می‌کند:

@font-face{ 
  font-family: 'Vazirmatn';
  src: url('/wp-content/uploads/fonts/Vazirmatn-Regular.woff2') format('woff2');
  font-weight: 400;
  font-display: swap;
 }
body { font-family: 'Vazirmatn', Tahoma, sans-serif; }

font-display: swap باعث می‌شود متن تا بارگذاری فونت با فونت جایگزین نمایش داده شود و صفحه خالی نماند. روی هاست‌هایی که از ایران کند به سرویس‌های خارجی متصل می‌شوند، بارگذاری فونت از هاست خودتان معمولاً سریع‌تر از سرویس‌های فونت آنلاین است.

مرحله ۵: تاریخ شمسی در وردپرس

وردپرس تاریخ‌ها را به میلادی ذخیره و نمایش می‌دهد. برای نمایش شمسی دو راه دارید. نکته مهم در هر دو: تاریخ در پایگاه داده میلادی باقی می‌ماند و فقط نمایش تغییر می‌کند؛ این برای سازگاری با افزونه‌ها، نقشه سایت و موتورهای جستجو درست است.

راه اول: افزونه

افزونه‌های رایگانی در مخزن رسمی وردپرس برای این کار وجود دارد؛ مثلاً «پارسی دیت – Parsi Date» که تاریخ‌ها را شمسی می‌کند و امکانات دیگری هم برای سایت‌های فارسی دارد. از افزونه‌ها › افزودن نام آن را جستجو و نصب کنید و تنظیماتش را بررسی کنید. پیش از نصب هر افزونه، تاریخ آخرین به‌روزرسانی و سازگاری با نسخه وردپرس خود را ببینید و از سایت پشتیبان بگیرید؛ روش آن در نصب و مدیریت افزونه‌ها و پشتیبان‌گیری وردپرس آمده است.

مزیت افزونه کامل بودن است: بایگانی‌ها، تقویم ابزارک، تاریخ دیدگاه‌ها و گاهی پیشخوان هم شمسی می‌شوند. عیب آن این است که یک افزونه دیگر به سایت اضافه می‌شود و ممکن است با بعضی قالب‌ها یا افزونه‌های فروشگاهی تداخل داشته باشد.

راه دوم: کد PHP بدون افزونه

اگر فقط می‌خواهید تاریخ نوشته‌ها در صفحه شمسی شود، چند خط کد کافی است. تابع زیر تاریخ میلادی را با یک الگوریتم حسابی به شمسی تبدیل می‌کند:

<?php
/**
 * Convert a Gregorian date to Jalali (Shamsi).
 * Arithmetic algorithm, valid for modern dates.
 */
function ds_g2j( int $gy, int $gm, int $gd ): array {
	$g_days = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ];
	$gy2    = ( $gm > 2 ) ? $gy + 1 : $gy;
	$days   = 355666 + ( 365 * $gy ) + intdiv( $gy2 + 3, 4 ) - intdiv( $gy2 + 99, 100 )
		+ intdiv( $gy2 + 399, 400 ) + $gd + $g_days[ $gm - 1 ];
	$jy     = -1595 + ( 33 * intdiv( $days, 12053 ) );
	$days  %= 12053;
	$jy    += 4 * intdiv( $days, 1461 );
	$days  %= 1461;
	if ( $days > 365 ) {
		$jy  += intdiv( $days - 1, 365 );
		$days = ( $days - 1 ) % 365;
	}
	if ( $days < 186 ) {
		$jm = 1 + intdiv( $days, 31 );
		$jd = 1 + ( $days % 31 );
	} else {
		$jm = 7 + intdiv( $days - 186, 30 );
		$jd = 1 + ( ( $days - 186 ) % 30 );
	}
	return [ $jy, $jm, $jd ];
}

function ds_jalali_date( int $timestamp ): string {
	$months = [ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',
		'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' ];
	[ $y, $m, $d ] = ds_g2j( (int) gmdate( 'Y', $timestamp ), (int) gmdate( 'n', $timestamp ), (int) gmdate( 'j', $timestamp ) );
	return $d . ' ' . $months[ $m - 1 ] . ' ' . $y;
}

پیش از استفاده، تابع را با چند تاریخ مشخص آزمودیم؛ از جمله شب و روز نوروز ۱۴۰۵ و روز کبیسه میلادی. خروجی واقعی اجرا با PHP 8.4:

2026-03-20 => 1404/12/29
2026-03-21 => 1405/01/01
2026-10-15 => 1405/07/23
2025-03-21 => 1404/01/01
2024-02-29 => 1402/12/10
2000-01-01 => 1378/10/11
23 مهر 1405

برای اطمینان بیشتر، همین تاریخ‌ها را با کتابخانه مستقل jdatetime در پایتون 3.13.5 هم تبدیل کردیم و نتیجه‌ها کاملاً یکسان بود:

import datetime
import jdatetime

for g in ["2026-03-20", "2026-03-21", "2026-10-15", "2025-03-21", "2024-02-29", "2000-01-01"]:
    j = jdatetime.date.fromgregorian(date=datetime.date.fromisoformat(g))
    print(g, "=>", j.strftime("%Y/%m/%d"))

خروجی:

2026-03-20 => 1404/12/29
2026-03-21 => 1405/01/01
2026-10-15 => 1405/07/23
2025-03-21 => 1404/01/01
2024-02-29 => 1402/12/10
2000-01-01 => 1378/10/11

حالا تابع را به فیلتر get_the_date وردپرس وصل می‌کنیم تا هر جا قالب تاریخ نوشته را نمایش می‌دهد، شمسی شود. این کد را همراه تابع بالا با افزونه Code Snippets یا در فایل functions.php قالب فرزند قرار دهید؛ هرگز فایل قالب اصلی را ویرایش نکنید، چون با به‌روزرسانی پاک می‌شود:

<?php
// Show post dates in Jalali (Shamsi) - add via Code Snippets or a child theme.
// Requires ds_g2j() from the previous block.
function ds_jalali_from_ts( int $ts ): string {
	$months = [ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور',
		'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' ];
	// wp_date() respects the site timezone from Settings > General.
	[ $y, $m, $d ] = ds_g2j( (int) wp_date( 'Y', $ts ), (int) wp_date( 'n', $ts ), (int) wp_date( 'j', $ts ) );
	return $d . ' ' . $months[ $m - 1 ] . ' ' . $y;
}

add_filter( 'get_the_date', function ( $date, $format, $post ) {
	if ( is_admin() ) {
		return $date; // keep the dashboard untouched
	}
	$ts = get_post_timestamp( $post );
	return $ts ? ds_jalali_from_ts( $ts ) : $date;
}, 10, 3 );

این کد را بیرون از وردپرس، با شبیه‌سازی تابع‌های لازم و منطقه زمانی تهران، اجرا کردیم. به سطر دوم دقت کنید: ساعت ۲۱:۳۰ به وقت جهانی روز ۲۰ مارس، در تهران بامداد روز بعد و یعنی اول فروردین است. اگر از wp_date استفاده نمی‌کردیم، این نوشته اشتباهاً با تاریخ ۲۹ اسفند نمایش داده می‌شد:

2026-10-15 10:00:00 UTC -> 23 مهر 1405
2026-03-20 21:30:00 UTC -> 1 فروردین 1405

بعد از افزودن کد، کش سایت را پاک کنید و یک نوشته را ببینید. اگر قالب شما تاریخ را با تابع دیگری مثل the_time نمایش می‌دهد، باید فیلتر get_the_time را هم به همین شکل اضافه کنید.

تبدیل ارقام به فارسی

خروجی بالا ارقام انگلیسی دارد. اگر ارقام فارسی می‌خواهید، این تابع را روی رشته نهایی اعمال کنید:

<?php
function ds_fa_digits( string $text ): string {
	return strtr( $text, [ '0' => '۰', '1' => '۱', '2' => '۲', '3' => '۳', '4' => '۴',
		'5' => '۵', '6' => '۶', '7' => '۷', '8' => '۸', '9' => '۹' ] );
}
echo ds_fa_digits( '23 مهر 1405 - 18:30' ), "\n";

خروجی واقعی:

۲۳ مهر ۱۴۰۵ - ۱۸:۳۰

ارقام را فقط در لایه نمایش فارسی کنید. اگر عدد فارسی وارد پایگاه داده، نامک یا فیلدهای قیمت فروشگاه شود، محاسبه و جستجو دچار مشکل می‌شوند.

مرحله ۶: ترجمه قالب و افزونه‌ها

بیشتر قالب‌ها و افزونه‌های معروف ترجمه فارسی دارند که با تغییر زبان سایت خودکار نصب می‌شود. اگر بخشی هنوز انگلیسی ماند، اول ترجمه‌ها را از صفحه به‌روزرسانی‌ها به‌روز کنید. اگر ترجمه وجود نداشت، می‌توانید با افزونه‌های ترجمه رشته‌ها یا فایل‌های .po و .mo ترجمه را اضافه کنید. فایل‌های ترجمه سفارشی را در پوشه wp-content/languages نگه دارید، نه داخل پوشه قالب، تا با به‌روزرسانی از بین نروند. برای فروشگاه ووکامرسی، متن‌های ایمیل و واحد پول را هم بررسی کنید؛ راهنما در نصب و راه‌اندازی ووکامرس.

نکته‌های سئو برای سایت فارسی

  • نامک (slug) نوشته‌ها را ترجیحاً انگلیسی و کوتاه بنویسید؛ نامک فارسی در آدرس به رشته‌ای طولانی از کاراکترهای کدشده تبدیل می‌شود که اشتراک‌گذاری آن سخت است.
  • ویژگی زبان صفحه (lang="fa-IR") را وردپرس خودکار تنظیم می‌کند؛ آن را دستی تغییر ندهید.
  • از نیم‌فاصله در عنوان و متن استفاده کنید تا کلمه‌هایی مثل «می‌شود» درست نمایش داده شوند.
  • تاریخ شمسی را فقط در نمایش به کار ببرید و داده ساختاریافته (Schema) را با تاریخ استاندارد میلادی باقی بگذارید. افزونه‌های سئو مثل Rank Math این کار را خودکار انجام می‌دهند.

پیش از هر تغییر

پیش از افزودن کد یا افزونه، از سایت پشتیبان کامل بگیرید و اگر امکانش هست، تغییر را اول روی نسخه آزمایشی (Staging) امتحان کنید. اگر بعد از افزودن کد صفحه سفید یا پیام خطای مهم دیدید، راهنمای رفع خطای مهم وردپرس را ببینید. افزونه Code Snippets در صورت خطای PHP معمولاً همان قطعه کد را غیرفعال می‌کند و سایت از دسترس خارج نمی‌شود.

📌 همچنین بخوانید: ساخت نوشته و انتشار اولین مقاله در وردپرس، تفاوت نوشته، برگه، دسته و برچسب در وردپرس و نصب وردپرس در لوکال هاست

سوالات متداول

چطور زبان وردپرس را فارسی کنم؟

در پیشخوان به تنظیمات › عمومی بروید، زبان سایت را روی فارسی بگذارید و ذخیره کنید. وردپرس ترجمه را خودکار دانلود می‌کند و پیشخوان راست‌چین می‌شود.

چطور تاریخ وردپرس را شمسی کنم؟

یا یک افزونه تاریخ شمسی مثل Parsi Date از مخزن رسمی نصب کنید، یا با یک تابع تبدیل تاریخ و فیلتر get_the_date در Code Snippets فقط نمایش تاریخ را شمسی کنید.

آیا شمسی کردن تاریخ روی سئو اثر منفی دارد؟

اگر فقط نمایش تغییر کند و تاریخ ذخیره‌شده و داده ساختاریافته میلادی بماند، مشکلی پیش نمی‌آید. تاریخ را در پایگاه داده تغییر ندهید.

چرا تاریخ بعضی نوشته‌ها یک روز اشتباه است؟

منطقه زمانی سایت درست تنظیم نشده یا کد تبدیل از زمان جهانی به‌جای زمان سایت استفاده می‌کند. منطقه زمانی را روی تهران بگذارید و در کد از wp_date استفاده کنید.

آموزش‌های مرتبط

آموزش‌های تازه، کد آماده و رفع خطاهر هفته در کانال Dev Source؛ رایگان.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *