مقاله وردپرس

وردپرس ۷ برای توسعه‌دهنده‌ها؛ از Armstrong تا Mary Lou چه آمد و چه نیامد

وردپرس ۷.۰ و ۷.۱ پشت سر هم منتشر شدند؛ با کلاینت هوش مصنوعی، حداقل PHP 7.4، ثبت بلوک فقط با PHP و ویرایش هم‌زمانی که آخر سر نیامد. این‌جا فقط چیزهایی را مرور می‌کنم که روی کد افزونه و قالب شما اثر دارد.

حمید اعراب توسعه‌دهنده ارشد بک‌اند وردپرس و ووکامرس
انتشار
زمان مطالعه
۷ دقیقه مطالعه

حمید اعراب ۲۷ مهر ۱۴۰۵ ۷ دقیقه مطالعه

جلد پیکسلی: عدد ۷ در یک قاب ترمینالی و خروجی wp core version
فهرست مطالب (8)

امسال وردپرس دو نسخهٔ بزرگ را با فاصلهٔ سه ماه منتشر کرد: نسخهٔ ۷.۰ با نام Armstrong در ۲۰ مه ۲۰۲۶ و نسخهٔ ۷.۱ با نام Mary Lou در ۱۹ اوت ۲۰۲۶. بیشتر مطلب‌هایی که دربارهٔ این دو نسخه نوشته شده، از زاویهٔ مدیر سایت به آن نگاه می‌کنند: پیشخوان تازه، رنگ‌بندی جدید، بلوک‌های تازه. من در این یادداشت فقط سراغ چیزهایی می‌روم که روی کدی که ما می‌نویسیم اثر دارد؛ یعنی جایی که یک افزونهٔ سفارشی یا قالب اختصاصی ممکن است بشکند، یا ابزار تازه‌ای به دستش بیاید.

حداقل PHP بالاخره بالا رفت

از وردپرس ۷.۰، حداقل نسخهٔ پشتیبانی‌شدهٔ PHP از 7.2.24 به 7.4 رسیده است. سایت‌هایی که هنوز روی PHP 7.2 یا 7.3 هستند، دیگر ویژگی تازه نمی‌گیرند و روی شاخهٔ ۶.۹ فقط به‌روزرسانی امنیتی دریافت می‌کنند.

برای ما معنایش این است که در افزونه‌هایی که فقط برای وردپرس ۷ به بعد عرضه می‌شوند، می‌شود با خیال راحت از ویژگی‌های PHP 7.4 مثل typed properties و arrow functionها استفاده کرد. ولی یک نکته را جدی بگیرید: «حداقل پشتیبانی‌شده» با «پیشنهادی» فرق دارد. خود تیم هستهٔ وردپرس در اطلاعیهٔ ماه مه اعلام کرد که حداقل نسخهٔ پیشنهادی همچنان PHP 8.3 است، و وردپرس ۶.۹ و ۷.۰ از PHP 8.5 هم به‌طور کامل پشتیبانی می‌کنند. برچسب «پشتیبانی آزمایشی» (beta) هم کلاً کنار گذاشته شد.

اگر افزونهٔ عمومی می‌نویسید، فیلد Requires PHP را واقعی پر کنید و در CI دست‌کم روی 7.4 و 8.5 تست بگیرید؛ دو سر طیفی که کاربرانتان واقعاً رویش هستند.

کلاینت هوش مصنوعی داخل هسته

مهم‌ترین تغییر ۷.۰ برای توسعه‌دهنده، یک کلاینت هوش مصنوعی مستقل از سرویس‌دهنده است. حالا یک نقطهٔ ورود واحد در PHP داریم، یعنی تابع wp_ai_client_prompt()، که متن، تصویر، صدا و ویدیو تولید می‌کند. انتخاب سرویس‌دهنده هم با مدیر سایت است و از صفحهٔ تازهٔ «تنظیمات › اتصال‌ها» (Connectors) انجام می‌شود.

دو نکته که در مطلب‌های تبلیغاتی کمتر گفته می‌شود:

  • هسته هیچ سرویس‌دهنده‌ای را همراه خودش ندارد و هیچ درخواست هوش مصنوعی‌ای را خودکار فعال نمی‌کند. افزونه‌های رسمی Anthropic، Google و OpenAI جدا از هسته نگه‌داری می‌شوند.
  • اگر افزونهٔ شما تا امروز کلید API و درخواست HTTP اختصاصی خودش را داشت، حالا می‌تواند این بخش را به هسته بسپارد. مزیتش این است که مدیر سایت فقط یک‌جا کلید وارد می‌کند و شما مجبور نیستید برای هر سرویس‌دهنده کد جدا نگه دارید.

Abilities API؛ زبان مشترک افزونه‌ها با ابزارهای هوشمند

Abilities API در ۶.۹ آمد، در ۷.۰ نسخهٔ جاوااسکریپتی گرفت و در ۷.۱ کامل‌تر شد. ایده ساده است: هر افزونه «توانایی»‌های خودش را با نام، توضیح، طرح ورودی و خروجی و یک بررسی دسترسی ثبت می‌کند، و بعد هر ابزاری، از یک دستیار هوشمند گرفته تا اسکریپت خودکار، می‌تواند آن‌ها را پیدا و اجرا کند.

در ۷.۰ دو بستهٔ @wordpress/abilities و @wordpress/core-abilities اضافه شدند که توانایی‌های ثبت‌شده در سرور را از طریق REST به سمت مرورگر می‌آورند. در ۷.۱ هم چرخهٔ اجرای قابل‌فیلتر، اعتبارسنجی سفارشی و کشف مشترک اضافه شد.

ثبت یک توانایی ساده این شکلی است:

add_action( 'wp_abilities_api_categories_init', function () {
	wp_register_ability_category( 'site-information', array(
		'label'       => __( 'Site information', 'my-plugin' ),
		'description' => __( 'Read-only facts about this site.', 'my-plugin' ),
	) );
} );

add_action( 'wp_abilities_api_init', function () {
	wp_register_ability( 'my-plugin/site-info', array(
		'label'               => __( 'Site info', 'my-plugin' ),
		'description'         => __( 'Returns the site name.', 'my-plugin' ),
		'category'            => 'site-information',
		'execute_callback'    => fn() => array( 'site_name' => get_bloginfo( 'name' ) ),
		'permission_callback' => fn() => current_user_can( 'manage_options' ),
		'meta'                => array( 'show_in_rest' => true ),
	) );
} );

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

بلوک فقط با PHP

یکی از تغییرهای کم‌سروصدا ولی کاربردی ۷.۰ این است که بلوک‌های ساده و رندرشونده در سرور را می‌شود فقط با PHP ثبت کرد؛ بدون فایل جاوااسکریپت و بدون مرحلهٔ build. کافی است render_callback بدهید و پرچم autoRegister را فعال کنید.

برای قالب‌هایی که با Blade و Sage ساخته می‌شوند، این خبر خوبی است. خیلی از بلوک‌های اختصاصی ما در عمل فقط یک خروجی سمت سرور هستند، مثل «آخرین مطالعه‌های موردی» یا «فرم تماس». تا حالا برای هرکدام یک اسکلت جاوااسکریپتی بی‌مصرف نگه می‌داشتیم.

تغییرهای کوچکی که کد قالب را عوض می‌کنند

  • حالت‌های دکمه در theme.json: حالت‌های hover، focus و active دکمه را حالا می‌شود مستقیم در theme.json تعریف کرد. اگر این‌ها را با CSS دستی می‌نوشتید، وقت جمع‌وجور کردن است.
  • anchor در بلوک‌های پویا: بلوک‌های پویا حالا anchor (همان id) را پشتیبانی می‌کنند و مقدارش در توضیح بلوک ذخیره می‌شود.
  • Pattern Overrides: هر ویژگی بلوک که Block Bindings را پشتیبانی کند، حالا می‌تواند Pattern Overrides هم داشته باشد. فعال‌سازی‌اش با فیلتر block_bindings_supported_attributes است.
  • API آیکون: در ۷.۰ یک بلوک Icon با رجیستری SVG سمت سرور و مسیر REST /wp/v2/icons آمد. در ۷.۱ این API عمومی شد.
  • پردازش تصویر در مرورگر: در ۷.۱، فشرده‌سازی، تغییر اندازه و ساخت بندانگشتی تصویرها در خود مرورگر انجام می‌شود و پشتیبانی بومی AVIF و HEIC هم اضافه شده است. اگر افزونه‌ای دارید که روی wp_generate_attachment_metadata یا اندازه‌های تصویر هوک زده، حتماً با آپلود واقعی تستش کنید.

چیزی که نیامد: ویرایش هم‌زمان

ویرایش هم‌زمان (real-time collaboration) پر سروصداترین ویژگی پیش‌نمایش‌های ۷.۰ بود. ولی ۸ مه ۲۰۲۶، دوازده روز قبل از انتشار، از نسخهٔ نهایی کنار گذاشته شد. در ۷.۱ هم نیامد، و مشارکت‌کنندگان در سپتامبر گفتند رویکرد تازه «هنوز در مراحل اولیه است». آنچه در دسترس است همان یادداشت‌ها (Notes) است: کامنت‌های ناهم‌زمان روی بلوک‌ها که در ۷.۱ متن غنی، منشن و یادداشت روی متن انتخاب‌شده گرفتند.

اگر به مشتری قول داده بودید که «با وردپرس ۷ تیم محتوا هم‌زمان روی یک صفحه کار می‌کند»، الان وقت اصلاح انتظارهاست.

چک‌لیست من برای ارتقای یک سایت اختصاصی به ۷.x

  1. نسخهٔ PHP سرور را ببینید. اگر زیر 8.3 است، ارتقای PHP را جدا و قبل از ارتقای وردپرس انجام دهید تا اگر مشکلی پیش آمد، بدانید از کدام بوده.
  2. افزونه‌های سفارشی را با WP_DEBUG روشن روی یک نسخهٔ staging باز کنید و لاگ را برای هشدارهای deprecation بخوانید.
  3. هر جا تصویر پردازش می‌کنید، با آپلود واقعی AVIF و HEIC تست کنید.
  4. اگر بلوک اختصاصی دارید، ببینید کدام‌ها را می‌شود به ثبت فقط با PHP منتقل کرد و از build حذف کرد.
  5. پیش از اینکه چیزی را با Abilities API بیرون بدهید، برای هر توانایی permission_callback واقعی بنویسید؛ نه __return_true.

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

منابع

$ ./request_review

همین مشکل را در فروشگاه خودتان دارید؟

توسعه‌دهنده ارشد WordPress و WooCommerce برای معماری، اتصال سیستم‌ها و حل مسائل پیچیده production.

درخواست بررسی فنی

دیدگاه‌ها

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

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