اولین باری که یک قالب اختصاصی برای یک فروشگاه فایل دیجیتال ساختم، انتظار داشتم با همان دانشی که در پروژه‌های ووکامرس به دست آورده بودم، کار را سریع پیش ببرم اما در همان روز اول با دیوار نامرئی‌ای روبه‌رو شدم: EDD نه قالب‌های آماده ووکامرس را قبول می‌کرد، نه هوک‌های ووکامرس را می‌شناخت و نه ساختار فایلش شباهتی به ووکامرس داشت. آن روز فهمیدم که Easy Digital Downloads یک ووکامرس کوچک نیست؛ یک سیستم مستقل با معماری، هوک‌ها و توابع اختصاصی است که برای فروش محصولات دیجیتال بهینه شده. امروز می‌خواهم به این پرسش پاسخ بدهم: چگونه با توابع Easy Digital Downloads قالب وردپرس بسازیم؟ اگر با مفهوم پایه‌ای این افزونه فروشگاهی آشنا نیستید، ابتدا مطالعه ووکامرس چیست و چگونه فروشگاه اینترنتی بسازیم می‌تواند چارچوب ذهنی کلی فروشگاه‌های وردپرسی را روشن کند. همچنین برای درک عمیق‌تر مفهوم فروش دیجیتال، می‌توانید نگاهی به تعریف Digital Distribution بیندازید که پایه فلسفی EDD بر آن استوار است.

چرا توسعه قالب EDD با ووکامرس و وردپرس خام متفاوت است؟

توسعه قالب Easy Digital Downloads سه تفاوت بنیادی با توسعه قالب ووکامرس و وردپرس خام دارد که هرکدام می‌تواند یک توسعه‌دهنده با تجربه را سردرگم کند. تفاوت اول، معماری سبک‌تر و متمرکزتر است که در آن EDD فقط برای فروش محصولات دیجیتال طراحی شده و نیازی به مدیریت انبار، حمل‌ونقل و انواع پیچیده محصول ندارد. تفاوت دوم، سیستم قالب مستقل است که ساختار پوشه و فایل‌های متفاوتی از ووکامرس دارد. تفاوت سوم، توابع و هوک‌های اختصاصی است که پیشوند edd_ دارند و با توابع هسته وردپرس یا ووکامرس قابل جایگزینی نیستند.

در سطح فنی، این سه تفاوت به این معناست که توسعه‌دهنده‌ای که با ووکامرس کار کرده، در ورود به EDD باید سه لایه دانش جدید را بپذیرد. لایه اول، ساختار پوشه edd_templates است که به‌جای پوشه woocommerce در ووکامرس، در EDD ظاهر می‌شود. لایه دوم، توابع EDD است که با پیشوند edd_ شروع می‌شوند و برای دسترسی به داده دانلود، مشتری، سفارش و لایسنس استفاده می‌شوند. لایه سوم، هوک‌های EDD است که با پیشوند edd_ تعریف شده‌اند و در نقاط مختلف چرخه فروشگاه فعال می‌شوند.

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

EDD یک ووکامرس کوچک نیست؛ یک سیستم مستقل است که برای یک هدف مشخص ساخته شده: فروش فایل دیجیتال. اگر این تفاوت را در ابتدا بپذیرید، مسیر یادگیری شما دو برابر سریع‌تر می‌شود. اگر انتظار داشته باشید همان الگوهای ووکامرس را در EDD ببینید، شش ماه درگیر خواهید بود.

نکته دومی که در تفاوت EDD با ووکامرس باید در نظر گرفت، تفاوت در پشتیبانی از لایسنس است. EDD در هسته خود سیستم مدیریت لایسنس دارد که به‌طور مستقیم با فروشگاه ادغام شده. این یعنی در توسعه قالب EDD، شما می‌توانید اطلاعات لایسنس مشتری را مستقیماً از توابع EDD بازیابی کنید، بدون نیاز به افزونه جانبی. در ووکامرس، این لایه به‌طور پیش‌فرض وجود ندارد و باید از افزونه‌های ثالث استفاده کنید. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در WooCommerce یا Easy Digital Downloads نوشته‌ام به‌طور کامل این موضوع را باز می‌کند.

ساختار فایل و پوشه EDD در قالب

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

ساختار پیش‌فرض این پوشه به‌شرح زیر است:

your-theme/
├── edd_templates/
│   ├── shortcode-download.php
│   ├── shortcode-cart.php
│   ├── shortcode-checkout.php
│   ├── shortcode-receipt.php
│   ├── shortcode-login.php
│   ├── shortcode-register.php
│   ├── shortcode-profile-editor.php
│   ├── widgets.php
│   ├── checkout_cart.php
│   └── history.php

نکته مهم این است که این ساختار، نسخه‌ای از ساختار پیش‌فرض EDD است که در پوشه templates خود افزونه قرار دارد. شما با ایجاد پوشه edd_templates در ریشه قالب خود و کپی‌کردن فایل‌های موردنیاز در همان مسیر، آن‌ها را override می‌کنید. EDD ابتدا در قالب شما جستجو می‌کند و اگر فایل مورد نظر را پیدا نکرد، از نسخه پیش‌فرض افزونه استفاده می‌کند.

نکته دومی که در ساختار فایل EDD اهمیت دارد، تفاوت با ووکامرس در عمق پوشه است. در ووکامرس، شما ساختار درختی پیچیده‌ای مثل single-product/tabs/description.php دارید، اما در EDD، ساختار مسطح‌تر و ساده‌تر است و بیشتر فایل‌ها در ریشه پوشه edd_templates قرار می‌گیرند. این سادگی، یادگیری و نگهداری EDD را ساده‌تر می‌کند. اگر می‌خواهید درک عمیق‌تری از ساختار قالب استاندارد وردپرس داشته باشید، مقاله‌ای که در ساختار فایل‌های یک قالب استاندارد وردپرس نوشته‌ام به‌طور کامل این لایه را باز می‌کند.

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

سیستم Template Override: قلب توسعه قالب EDD

سیستم Template Override، قلب توسعه قالب Easy Digital Downloads است و درک دقیق آن، تفاوت بین یک قالب آماتور و یک قالب حرفه‌ای فروشگاه دیجیتال محسوب می‌شود. این سیستم به شما اجازه می‌دهد هر فایل قالب EDD را با نسخه اختصاصی خودتان جایگزین کنید، بدون اینکه به فایل‌های افزونه دست بزنید.

در سطح فنی، EDD از تابع edd_get_template_part برای بارگذاری قالب استفاده می‌کند که مسیر جستجوی زیر را طی می‌کند:

  1. پوشه edd_templates در قالب فرزند (اگر وجود داشته باشد)
  2. پوشه edd_templates در قالب والد
  3. پوشه templates در افزونه EDD

این ترتیب جستجو، به شما اجازه می‌دهد نسخه خودتان را در قالب قرار دهید و EDD به‌طور خودکار از آن استفاده کند. برای override یک فایل، فقط باید آن را در همان مسیر نسبی در پوشه edd_templates قالب خود کپی کنید:

// برای override کردن فایل shortcode-checkout.php
// فایل EDD اصلی در:
wp-content/plugins/easy-digital-downloads/templates/shortcode-checkout.php

// فایل override شده در قالب شما در:
wp-content/themes/your-theme/edd_templates/shortcode-checkout.php

نکته مهم درباره Template Override در EDD، تشخیص فایل‌های به‌روز شده است. EDD در پنل مدیریت، بخشی به‌نام Tools دارد که در آن فهرست فایل‌های override شده و فایل‌های قدیمی نمایش داده می‌شود. توصیه من این است که پس از هر بروزرسانی EDD، این بخش را بررسی کنید و فایل‌های override شده را با نسخه جدید هماهنگ کنید. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در مهم‌ترین هوک‌های وردپرس کدامند نوشته‌ام نقطه شروع خوبی است.

در Template Override، قاعده طلایی این است: هرچه فایل‌های کمتری را override کنید، قالب شما پایدارتر خواهد بود. اگر می‌توانید یک تغییر کوچک را با هوک انجام دهید، هرگز فایل قالب را override نکنید. فایل override شده، تعهد بلندمدت شما به هماهنگی با هر بروزرسانی EDD است.

تجربه‌ای که در پروژه‌های واقعی داشته‌ام این است: در فروشگاه‌های EDD که به‌طور مکرر بروزرسانی می‌شوند، قالب‌هایی که از هوک‌ها به‌جای override استفاده کرده‌اند، در طول دو سال به‌طور تقریبی هیچ تغییری نیاز نداشته‌اند. در مقابل، قالب‌هایی که فایل‌های زیادی را override کرده‌اند، با هر بروزرسانی EDD، بین دو تا چهار ساعت زمان صرف بررسی و هماهنگی کرده‌اند.

اعلام پشتیبانی قالب از EDD

اعلام پشتیبانی قالب از Easy Digital Downloads، اولین قدم در توسعه قالب فروشگاه دیجیتال است. برخلاف ووکامرس که به اعلام پشتیبانی صریح نیاز دارد، EDD به‌طور خودکار تشخیص می‌دهد که قالب شما پشتیبانی می‌کند یا نه. با این حال، برای فعال‌سازی قابلیت‌های پیشرفته مثل استایل‌های اختصاصی و گالری محصول، می‌توانید از تابع زیر استفاده کنید:

add_action( 'after_setup_theme', function() {
  add_theme_support( 'edd' );
  add_theme_support( 'edd-styles' );
} );

اعلام edd به EDD می‌گوید که قالب شما می‌خواهد استایل‌های EDD را مدیریت کند. اعلام edd-styles به EDD می‌گوید که استایل‌های پیش‌فرض را بارگذاری نکن و به‌جای آن، از استایل‌های خود قالب استفاده کن. اگر این اعلام را انجام ندهید، EDD استایل‌های پیش‌فرض خودش را بارگذاری می‌کند که ممکن است با طراحی قالب شما هماهنگ نباشد.

نکته مهم درباره اعلام پشتیبانی، تفاوت با ووکامرس در تنظیمات گرید و تصویر است. در ووکامرس، می‌توانید اندازه تصویر شاخص و تعداد ستون‌های گرید را تعیین کنید، اما در EDD این تنظیمات در پنل مدیریت و در بخش Downloads تعریف می‌شوند. یعنی تصمیم‌های ظاهری به‌جای سطح کد، در سطح پنل مدیریت گرفته می‌شوند که برای کاربران غیرفنی ساده‌تر است.

تجربه‌ای که در پروژه‌های واقعی به آن رسیده‌ام این است: در پروژه‌هایی که اعلام پشتیبانی از EDD را فراموش کرده‌ام، استایل‌های پیش‌فرض EDD با استایل‌های قالب تعارض پیدا کرده و ظاهر سایت به‌هم ریخته. توصیه من این است که اگر قالب شما به‌طور اختصاصی برای EDD ساخته شده، حتماً اعلام edd-styles را انجام دهید. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در مهم‌ترین Action Hook های وردپرس نوشته‌ام نقطه شروع خوبی است.

توابع و هوک‌های Download Loop

توابع و هوک‌های Download Loop، پرکاربردترین دسته توابع EDD در توسعه قالب هستند و در تمام صفحات آرشیو محصولات و فهرست‌های دانلود استفاده می‌شوند. Download Loop در EDD، ساختار ساده‌تری از Product Loop ووکامرس دارد چون محصولات دیجیتال نیازی به نمایش موجودی، حمل‌ونقل و انواع پیچیده ندارند.

در سطح فنی، Download Loop از مجموعه‌ای از فایل‌های قالب و هوک‌ها استفاده می‌کند که هرکدام یک بخش از کارت دانلود را نمایش می‌دهند. EDD از شورت‌کد [downloads] برای نمایش فهرست دانلودها استفاده می‌کند که با آرگومان‌های متنوع قابل تنظیم است:

// نمایش فهرست دانلودها با شورت‌کد
echo do_shortcode( '[downloads number=12 columns=3 orderby=date order=DESC]' );

سه تابع اصلی در Download Loop عبارتند از: edd_get_downloads() که فهرست دانلودها را بازیابی می‌کند، edd_downloads_query() که کوئری دانلودها را با آرگومان‌های سفارشی اجرا می‌کند، و edd_get_download() که یک دانلود خاص را با شناسه بازیابی می‌کند.

هوک‌های مهم در Download Loop به‌شرح زیر هستند:

هوککاربرد
edd_before_download_archiveقبل از شروع آرشیو دانلودها
edd_downloads_list_beforeقبل از فهرست دانلودها
edd_download_beforeقبل از هر کارت دانلود
edd_download_afterبعد از هر کارت دانلود
edd_downloads_list_afterبعد از فهرست دانلودها
edd_after_download_archiveبعد از پایان آرشیو دانلودها

تجربه‌ای که در پروژه‌های واقعی به آن رسیده‌ام این است: در فروشگاه‌های EDD که به نمایش اطلاعات اضافه روی کارت دانلود نیاز دارند (مثل تعداد دانلود، امتیاز یا برچسب «پرفروش»)، استفاده از هوک edd_download_after انتخاب بهتری از override فایل shortcode-download.php است چون این رویکرد در آپدیت‌های EDD پایدارتر است. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در مهم‌ترین Filter Hook های وردپرس نوشته‌ام نقطه شروع خوبی است.

سفارشی‌سازی صفحه محصول دیجیتال

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

هوک‌های مهم در صفحه محصول دیجیتال به‌شرح زیر هستند:

// ساختار پیش‌فرض صفحه محصول
do_action( 'edd_before_download_content' );

// محتوای محصول
do_action( 'edd_download_content' );

// متادیتای محصول
do_action( 'edd_download_meta' );

// فرم خرید
do_action( 'edd_purchase_form' );

do_action( 'edd_after_download_content' );

سه هوک پرکاربرد که در پروژه‌های واقعی بیشترین استفاده را داشته‌ام:

هوک edd_purchase_form

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

add_action( 'edd_purchase_form', 'custom_download_badge', 5 );

function custom_download_badge() {
  $download_id = get_the_ID();
  $sales = edd_get_download_sales_stats( $download_id );
  if ( $sales > 100 ) {
    echo '<span class="best-seller-badge">پرفروش</span>';
  }
}

در این مثال، با تنظیم اولویت روی عدد ۵ (کوچکتر از پیش‌فرض ۱۰)، بخش جدید قبل از قیمت محصول نمایش داده می‌شود. این الگو، در فروشگاه‌هایی که می‌خواهند اطلاعات اضافه مثل آمار فروش، تعداد دانلود یا امتیاز محصول را نمایش دهند، بسیار کاربردی است.

هوک edd_after_download_content

این هوک پس از محتوای اصلی محصول اجرا می‌شود و برای افزودن بخش‌های تکمیلی مثل مشخصات فنی، جدول مقایسه یا پیشنهادات مرتبط استفاده می‌شود:

add_action( 'edd_after_download_content', function() {
  if ( ! is_singular( 'download' ) ) return;
  // نمایش محتوای اضافه مثل لیست مشخصات
  get_template_part( 'parts/download-specs' );
} );

هوک edd_download_meta

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

تجربه‌ای که در پروژه‌های واقعی به آن رسیده‌ام این است: در فروشگاه‌های EDD که به سفارشی‌سازی‌های عمیق نیاز دارند، ترکیب هوک‌های EDD با override فایل قالب، بهترین تعادل بین پایداری و آزادی را ارائه می‌دهد. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در لیست توابع پرکاربرد وردپرس و نحوه استفاده از آنها نوشته‌ام نقطه شروع خوبی است.

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

توابع دسترسی به داده دانلود

توابع دسترسی به داده دانلود، ستون اصلی توسعه قالب EDD هستند و در هر بخش از قالب که با محصول سروکار دارد، استفاده می‌شوند. این توابع به شما اجازه می‌دهند بدون کوئری مستقیم به پایگاه داده، به تمام داده‌های محصول دیجیتال دسترسی داشته باشید. برخلاف ووکامرس که از یک شیء متمرکز WC_Product استفاده می‌کند، EDD از توابع مستقل با پیشوند edd_ استفاده می‌کند که هرکدام یک داده مشخص را برمی‌گردانند.

تابعخروجیکاربرد
edd_get_download( $id )شیء دانلودبازیابی دانلود با ID
edd_get_downloads( $args )آرایه دانلودهابازیابی فهرست دانلودها
get_the_title( $id )عنوان دانلودنمایش نام دانلود
edd_price( $id )HTML قیمتنمایش قیمت با فرمت
edd_get_download_price( $id )قیمت عددیبازیابی قیمت خام
edd_get_download_sales_stats( $id )تعداد فروشنمایش آمار فروش
edd_get_download_earnings_stats( $id )مجموع درآمدنمایش درآمد
edd_get_download_notes( $id )یادداشت دانلودبازیابی یادداشت
edd_get_download_file_url( $id )URL فایللینک دانلود امن
edd_get_download_files( $id )آرایه فایل‌هابازیابی فایل‌های ضمیمه
edd_get_download_skus( $id )شناسه محصولنمایش SKU
edd_get_download_version( $id )نسخه محصولنمایش نسخه
edd_get_download_categories( $id )دسته‌بندی‌هابازیابی دسته‌بندی
edd_get_download_tags( $id )برچسب‌هابازیابی برچسب
edd_get_download_thumbnail( $id )HTML تصویرنمایش تصویر شاخص

نمونه کد عملی برای استفاده از این توابع در قالب:

<?php
$download_id = get_the_ID();
$price = edd_get_download_price( $download_id );
$sales = edd_get_download_sales_stats( $download_id );
$version = edd_get_download_version( $download_id );
$file_url = edd_get_download_file_url( $download_id, $download_id );
?>

<div class="download-meta">
  <?php if ( $version ) : ?>
    <p><strong>نسخه:</strong> <?php echo esc_html( $version ); ?></p>
  <?php endif; ?>

  <?php if ( $sales > 0 ) : ?>
    <p><strong>تعداد فروش:</strong> <?php echo esc_html( number_format_i18n( $sales ) ); ?></p>
  <?php endif; ?>
</div>

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

سفارشی‌سازی سبد خرید و تسویه‌حساب

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

هوک‌های مهم در سبد خرید و تسویه‌حساب EDD به‌شرح زیر هستند:

هوکمکانکاربرد
edd_before_cartقبل از سبد خریدافزودن پیام یا بنر
edd_cart_items_afterبعد از آیتم‌های سبدافزودن محتوای اضافه
edd_cart_footer_afterبعد از فوتر سبدافزودن یادآوری
edd_before_checkout_registration_formقبل از فرم ثبت‌نامافزودن اطلاعات
edd_purchase_form_before_submitقبل از دکمه پرداختافزودن تاییدیه
edd_purchase_form_after_submitبعد از دکمه پرداختافزودن اطلاعات پرداخت
edd_after_purchase_formبعد از کل فرم خریدافزودن محتوا

فیلترهای مهم برای سفارشی‌سازی فیلدهای تسویه‌حساب:

add_filter( 'edd_purchase_form_required_fields', function( $required_fields ) {
  // حذف فیلد نام شرکت
  unset( $required_fields['edd_company'] );

  // اضافه کردن فیلد سفارشی الزامی
  $required_fields['edd_mobile_extra'] = array(
    'error_id' => 'invalid-mobile',
    'error_message' => 'لطفا شماره موبایل دوم را وارد کنید',
  );

  return $required_fields;
} );

نکته مهم درباره سفارشی‌سازی سبد خرید و تسویه‌حساب EDD، سازگاری با بلوک‌های Gutenberg است. برخلاف ووکامرس که از بلوک‌های اختصاصی خود استفاده می‌کند، EDD عمدتاً از شورت‌کدها استفاده می‌کند و این یعنی سازگاری بیشتری با صفحه‌سازها و کد سفارشی دارد. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در استفاده از توابع ووکامرس برای طراحی قالب وردپرس نوشته‌ام به‌طور کامل این موضوع را باز می‌کند.

توابع شرطی مخصوص EDD

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

تابعوضعیت بررسی شده
is_post_type_archive( 'download' )آرشیو دانلودها
is_singular( 'download' )صفحه دانلود تکی
is_tax( 'download_category' )صفحه دسته‌بندی دانلود
is_tax( 'download_tag' )صفحه برچسب دانلود
edd_is_checkout()صفحه تسویه‌حساب EDD
edd_is_success_page()صفحه موفقیت خرید
edd_is_failed_transaction_page()صفحه ناموفق خرید
edd_is_cart_saving_enabled()فعال بودن ذخیره سبد
edd_is_ajax_disabled()غیرفعال بودن AJAX

نمونه استفاده ترکیبی از این توابع:

add_action( 'wp_enqueue_scripts', function() {
  // بارگذاری استایل مخصوص صفحه دانلود
  if ( is_singular( 'download' ) ) {
    wp_enqueue_style( 'download-style', get_template_directory_uri() . '/css/download.css' );
  }

  // بارگذاری استایل مخصوص سبد و تسویه
  if ( edd_is_checkout() ) {
    wp_enqueue_style( 'checkout-style', get_template_directory_uri() . '/css/edd-checkout.css' );
  }
} );

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

بارگذاری استایل و اسکریپت در قالب EDD

بارگذاری استایل و اسکریپت در قالب EDD، یکی از بخش‌های مهم توسعه قالب فروشگاه دیجیتال است چون مستقیماً روی سرعت سایت اثر می‌گذارد. EDD به‌طور پیش‌فرض چندین فایل CSS و JS بارگذاری می‌کند که برخی از آن‌ها فقط در صفحات خاص لازم هستند. اگر این فایل‌ها در همه صفحات بارگذاری شوند، حجم صفحات به‌طور محسوس افزایش می‌یابد.

نکته مهم درباره بارگذاری استایل EDD، غیرفعال‌سازی استایل‌های پیش‌فرض در صفحات غیرمرتبط است:

add_action( 'wp_enqueue_scripts', function() {
  // حذف استایل و اسکریپت EDD در صفحات غیرمرتبط
  $is_edd_page = is_singular( 'download' )
    || is_post_type_archive( 'download' )
    || is_tax( 'download_category' )
    || is_tax( 'download_tag' )
    || edd_is_checkout();

  if ( ! $is_edd_page ) {
    wp_dequeue_style( 'edd-styles' );
    wp_dequeue_style( 'edd-fonts' );
    wp_dequeue_script( 'edd-ajax' );
    wp_dequeue_script( 'edd-checkout-global' );
  }
}, 99 );

نکته دومی که در بارگذاری استایل EDD اهمیت دارد، استفاده از edd_get_style_url برای بارگذاری استایل‌های EDD در صورت نیاز است. اگر می‌خواهید استایل‌های پیش‌فرض EDD را در صفحات خاص بارگذاری کنید، می‌توانید از این تابع استفاده کنید:

if ( edd_is_checkout() ) {
  wp_enqueue_style( 'edd-styles', EDD_PLUGIN_URL . 'assets/css/edd.min.css' );
}

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

هوک‌های کلیدی EDD در توسعه قالب

هوک‌های کلیدی EDD در توسعه قالب، ابزار اصلی برای سفارشی‌سازی بدون دست‌زدن به فایل‌های افزونه هستند. در ادامه، فهرست هوک‌های پرکاربرد در توسعه قالب EDD را ارائه می‌دهم که در پروژه‌های واقعی بیشترین استفاده را داشته‌ام.

دستههوککاربرد در قالب
فروشگاهedd_before_download_archiveافزودن هدر آرشیو
فروشگاهedd_after_download_archiveافزودن محتوا در انتهای آرشیو
فهرستedd_downloads_list_beforeافزودن فیلتر یا مرتب‌سازی
فهرستedd_downloads_list_afterافزودن صفحه‌بندی سفارشی
کارت دانلودedd_download_beforeافزودن نشانه یا برچسب
کارت دانلودedd_download_afterافزودن آمار یا دکمه سفارشی
صفحه محصولedd_before_download_contentافزودن بنر تخفیف
صفحه محصولedd_download_contentسفارشی‌سازی محتوای محصول
صفحه محصولedd_purchase_formسفارشی‌سازی فرم خرید
سبدedd_before_cartافزودن پیام امنیت
سبدedd_cart_footer_afterافزودن محتوای اضافه
تسویه‌حسابedd_purchase_form_before_submitافزودن تاییدیه
تسویه‌حسابedd_purchase_form_after_submitافزودن اطلاعات پرداخت
سفارشedd_complete_purchaseپس از تکمیل خرید
لایسنسedd_sl_license_createdپس از ساخت لایسنس جدید

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

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

مدیریت لایسنس و قالب سفارشی

مدیریت لایسنس، یکی از مزیت‌های اصلی EDD در مقایسه با ووکامرس است و در توسعه قالب سفارشی، نقش کلیدی دارد. EDD در هسته خود از طریق افزونه رسمی Software Licensing، سیستم مدیریت لایسنس کامل ارائه می‌دهد که به شما اجازه می‌دهد به هر خریدار، یک کد یکتا اختصاص دهید، تعداد فعال‌سازی‌ها را محدود کنید و تاریخ انقضا تعیین کنید.

در سطح فنی، مدیریت لایسنس در قالب با سه تابع اصلی انجام می‌شود:

// بازیابی لایسنس‌های کاربر
$user_id = get_current_user_id();
$licenses = edd_software_licensing()->get_licenses_of_customer( $user_id );

foreach ( $licenses as $license ) {
  $license_key = $license->key;
  $status = $license->status;
  $expiration = $license->expiration;
  // نمایش اطلاعات لایسنس
}

سه تابع مهم در مدیریت لایسنس EDD عبارتند از: edd_software_licensing() که شیء اصلی مدیریت لایسنس را برمی‌گرداند، get_licenses_of_customer() که لایسنس‌های یک مشتری خاص را برمی‌گرداند، و get_license_by_key() که یک لایسنس خاص را با کد بازیابی می‌کند.

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

چرا چایلد تم در فروشگاه دیجیتال ضروری است

چایلد تم در فروشگاه Easy Digital Downloads، نه یک توصیه بلکه یک ضرورت است. اگر فایل‌های EDD را مستقیماً در قالب اصلی خود override کنید، با هر بروزرسانی قالب، تغییرات شما پاک می‌شود. اگر از هوک‌ها در فایل functions.php قالب اصلی استفاده کنید، همان اتفاق می‌افتد. چایلد تم، راه‌حل استاندارد این مشکل است.

برای فروشگاه EDD، ساختار چایلد تم مشابه چایلد تم وردپرس خام است اما با چند نکته مهم. اولین نکته این است که چایلد تم شما باید اعلام پشتیبانی از EDD را در فایل functions.php خودش داشته باشد. دومین نکته این است که پوشه edd_templates باید در چایلد تم قرار بگیرد، نه در قالب والد. سومین نکته این است که تنظیمات EDD (مثل آدرس صفحات سبد و تسویه) در دیتابیس ذخیره می‌شود و با تغییر چایلد تم پاک نمی‌شود.

ساختار پیشنهادی چایلد تم برای فروشگاه EDD:

your-edd-child/
├── style.css
├── functions.php
├── edd_templates/
│   ├── shortcode-download.php
│   ├── shortcode-cart.php
│   ├── shortcode-checkout.php
│   └── shortcode-receipt.php
└── assets/
    ├── css/
    │   └── edd-custom.css
    └── js/
        └── edd-custom.js

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

اشتباهات رایج در توسعه قالب EDD

اشتباهات رایج در توسعه قالب EDD، یکی از مسائلی است که در پروژه‌های واقعی بارها دیده‌ام و بسیاری از آن‌ها به باگ‌های سخت و بی‌سروصدا منجر می‌شود. در ادامه، به هشت اشتباه رایج اشاره می‌کنم.

  • استفاده از ساختار پوشه ووکامرس: EDD از پوشه edd_templates استفاده می‌کند نه woocommerce. اگر فایل‌ها را در مسیر اشتباه قرار دهید، EDD آن‌ها را نمی‌شناسد.
  • override فایل‌های زیاد بدون دلیل: هر فایل override شده، یک تعهد بلندمدت به هماهنگی با بروزرسانی EDD است. قبل از هر override، بررسی کنید که آیا با هوک قابل حل است یا خیر.
  • نداشتن چایلد تم: تغییرات در قالب اصلی، با اولین بروزرسانی قالب پاک می‌شود. چایلد تم در فروشگاه دیجیتال یک ضرورت است.
  • فراموش‌کردن اعلام پشتیبانی edd-styles: بدون این اعلام، EDD استایل‌های پیش‌فرض خودش را بارگذاری می‌کند و ممکن است با طراحی قالب شما هماهنگ نباشد.
  • بارگذاری استایل EDD در همه صفحات: استایل و اسکریپت EDD باید فقط در صفحات مرتبط بارگذاری شود تا سرعت صفحات دیگر کاهش نیابد.
  • چاپ داده بدون پاک‌سازی: توابع EDD داده خام برمی‌گردانند و باید با esc_html و مشابه آن پاک‌سازی شوند.
  • نادیده‌گرفتن تنظیمات EDD در پنل: بسیاری از رفتارهای EDD در پنل مدیریت تنظیم می‌شوند، نه در کد. قبل از override فایل قالب، بررسی کنید که آیا مشکل با تنظیمات پنل قابل حل است.
  • عدم بررسی تغییرات در بروزرسانی: EDD ساختار فایل‌ها و توابع را در بروزرسانی‌های مهم تغییر می‌دهد و اگر این تغییرات بررسی نشوند، سایت شما ممکن است با خطا روبه‌رو شود.

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

پرسش‌های پرتکرار درباره توسعه قالب EDD

این بخش را به سؤالاتی اختصاص داده‌ام که بیشتر در جلسه‌های مشاوره تکرار می‌شوند و پاسخ‌شان در تصمیم نهایی وزن زیادی دارد.

سیستم Template Override در Easy Digital Downloads چگونه کار می‌کند؟

EDD از تابع edd_get_template_part برای بارگذاری قالب استفاده می‌کند که ترتیب جستجوی زیر را طی می‌کند: ابتدا پوشه edd_templates در قالب فرزند، سپس همان پوشه در قالب والد، و در نهایت پوشه templates در افزونه EDD. برای override کردن یک فایل، باید آن را در مسیر نسبی مشابه در پوشه edd_templates قالب خود کپی کنید. پس از هر بروزرسانی EDD، فایل‌های override شده را باید با نسخه جدید هماهنگ کنید.

تفاوت ساختار قالب EDD با ووکامرس در چیست؟

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

چگونه اعلام پشتیبانی قالب از EDD را انجام دهم؟

اعلام پشتیبانی از EDD با تابع add_theme_support( 'edd' ) در هوک after_setup_theme انجام می‌شود. برای مدیریت استایل‌ها از سمت قالب، باید add_theme_support( 'edd-styles' ) را هم اضافه کنید. اگر این اعلام را انجام ندهید، EDD استایل‌های پیش‌فرض خودش را بارگذاری می‌کند که ممکن است با طراحی قالب شما هماهنگ نباشد.

چگونه یک دانلود را در قالب با کد نمایش دهم؟

برای نمایش یک دانلود خاص در قالب، از تابع edd_get_download( $download_id ) استفاده کنید که یک شیء دانلود برمی‌گرداند. سپس می‌توانید از توابع مختلف مثل edd_price( $id )، edd_get_download_sales_stats( $id )، edd_get_download_version( $id ) و edd_get_download_file_url( $id ) استفاده کنید. برای نمایش فهرست دانلودها، از شورت‌کد [downloads] با آرگومان‌های متنوع یا از edd_get_downloads( $args ) استفاده کنید.

چرا صفحه محصول EDD در قالب من به‌هم ریخته است؟

به‌هم‌ریختگی صفحه محصول EDD معمولاً به یکی از سه دلیل زیر رخ می‌دهد. دلیل اول، نبود اعلام پشتیبانی edd-styles در functions.php قالب است که باعث می‌شود EDD استایل‌های پیش‌فرض خودش را بارگذاری کند. دلیل دوم، override ناقص فایل‌های قالب EDD است که باعث می‌شود برخی بخش‌ها بارگذاری نشوند. دلیل سوم، عدم بارگذاری استایل سفارشی قالب در صفحات EDD است. راه‌حل، بررسی بخش Downloads در پنل EDD و مطابقت ساختار فایل‌ها با نسخه فعال است.

چگونه استایل EDD را فقط در صفحات مرتبط بارگذاری کنم؟

با استفاده از توابع شرطی مخصوص EDD مثل is_singular( 'download' )، is_post_type_archive( 'download' ) و edd_is_checkout() در هوک wp_enqueue_scripts، می‌توانید استایل‌های EDD را فقط در صفحات مرتبط بارگذاری کنید. برای حذف استایل‌های پیش‌فرض، از wp_dequeue_style و wp_dequeue_script با اولویت بالا (مثلاً ۹۹) استفاده کنید. این کار می‌تواند حجم صفحات غیرمرتبط را تا بیست‌وپنج درصد کاهش دهد.

آیا باید از چایلد تم برای فروشگاه EDD استفاده کنم؟

بله، استفاده از چایلد تم در فروشگاه EDD یک ضرورت است. در قالب اصلی، اگر تغییرات اعمال کنید، با اولین بروزرسانی قالب، همه تغییرات پاک می‌شود. چایلد تم به شما اجازه می‌دهد تغییرات را در لایه‌ای جداگانه اعمال کنید و با بروزرسانی قالب والد، تغییرات شما حفظ شود. علاوه بر این، اگر از پوشه edd_templates در چایلد تم استفاده کنید، فایل‌های override شده از قالب اصلی جدا می‌مانند.

چگونه مدیریت لایسنس را در قالب EDD پیاده کنم؟

مدیریت لایسنس در EDD از طریق افزونه رسمی Software Licensing انجام می‌شود. برای نمایش لایسنس‌های یک کاربر در قالب، از تابع edd_software_licensing()->get_licenses_of_customer( $user_id ) استفاده کنید که آرایه‌ای از اشیاء لایسنس را برمی‌گرداند. برای هر لایسنس می‌توانید به کد ($license->key)، وضعیت ($license->status) و تاریخ انقضا ($license->expiration) دسترسی داشته باشید. این توابع به شما اجازه می‌دهند بدون کوئری مستقیم به دیتابیس، لایه لایسنس را به‌طور تمیز پیاده کنید.

آیا هوک‌های ووکامرس در EDD کار می‌کنند؟

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

تفاوت edd_get_downloads و get_posts چیست؟

تابع edd_get_downloads( $args ) یک wrapper اختصاصی EDD است که آرگومان‌های تخصصی (مثل price، sales، earnings) می‌پذیرد و کش را به‌طور خودکار مدیریت می‌کند. تابع get_posts( $args ) یک تابع هسته وردپرس است که برای هر نوع نوشته کار می‌کند. توصیه می‌شود برای دانلودها از edd_get_downloads استفاده کنید چون کارآمدتر است و با نسخه‌های مختلف EDD سازگار است.

آیا استفاده از توابع EDD روی سرعت قالب اثر دارد؟

توابع EDD به‌طور مستقیم اثر محسوسی روی سرعت قالب ندارند اما استفاده نادرست از آن‌ها می‌تواند به کندی منجر شود. سه نکته مهم وجود دارد: اول، کوئری‌های edd_get_downloads را در تعداد کم اجرا کنید. دوم، استایل و اسکریپت EDD را فقط در صفحات مرتبط بارگذاری کنید. سوم، برای داده‌های ثابت از transient یا کش استفاده کنید تا با هر بازدید، کوئری تکراری اجرا نشود.

آیا EDD از RTL و زبان فارسی پشتیبانی می‌کند؟

بله، EDD از RTL (راست‌به‌چپ) و زبان فارسی پشتیبانی کامل دارد. این افزونه از فایل‌های ترجمه استاندارد وردپرس استفاده می‌کند و ترجمه فارسی آن در مخزن رسمی وردپرس در دسترس است. برای استفاده از ترجمه فارسی، کافی است زبان وردپرس را روی فارسی تنظیم کنید. با این حال، در برخی نسخه‌ها، ترجمه فارسی ممکن است ناقص باشد و نیاز به تکمیل داشته باشد. اگر می‌خواهید درک عمیق‌تری از این لایه داشته باشید، مقاله‌ای که در چگونه قالب وردپرس را برای زبان فارسی آماده کنیم نوشته‌ام نقطه شروع خوبی است.

چه زمانی باید قالب سفارشی برای فروشگاه EDD بسازم و چه زمانی از قالب آماده استفاده کنم؟

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

از سفارشی‌سازی تا فروشگاه دیجیتال حرفه‌ای

اگر این راهنما را با یک جمله خلاصه کنم، توسعه قالب Easy Digital Downloads یک فرآیند سه‌لایه‌ای است که از اعلام پشتیبانی شروع می‌شود، با هوک‌های EDD ادامه می‌یابد و در صورت نیاز با Template Override تکمیل می‌شود. EDD در مقایسه با ووکامرس، سبک‌تر، متمرکزتر و ساده‌تر است اما در عوض، اختصاصی‌تر است و نیاز به یادگیری معماری مستقل دارد. در این راهنما، ساختار فایل EDD در قالب، سیستم Template Override، هوک‌های کلیدی، توابع دسترسی به داده دانلود، سفارشی‌سازی صفحه محصول و سبد خرید، و مدیریت لایسنس را به‌همراه نمونه کد عملی بررسی کردیم و اشتباهات رایج این حوزه را نیز پوشش دادیم.

قدم بعدی که پیشنهاد می‌کنم بردارید این است: ابتدا با استفاده از چارچوب‌هایی که در این راهنما آورده‌ام، اعلام پشتیبانی و ساختار چایلد تم را در پروژه فروشگاه دیجیتال خود فعال کنید. سپس تدریجاً با هوک‌های EDD آشنا شوید و از آن‌ها برای سفارشی‌سازی‌های مورد نیازتان استفاده کنید. در نهایت، اگر به تغییرات عمیق‌تری نیاز داشتید، فایل‌های override شده را با احتیاط و پس از بررسی دقیق انتخاب کنید.

اگر تجربه‌ای از توسعه قالب Easy Digital Downloads دارید — چه موفق، چه ناامیدکننده — برایم جالب است که در دیدگاه‌ها بنویسید کدام بخش از این راهنما بیشترین اثر را روی پروژه شما داشت و کدام چالش در توسعه قالب فروشگاه دیجیتال، بیشترین زمان را از شما گرفته است. تجربه‌های واقعی شما، این راهنما را برای خواننده بعدی دقیق‌تر و کاربردی‌تر خواهد کرد. 📦