ویژگی تصویر

آموزش تابع get_block_templates() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع get_block_templates در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع get_block_templates() در هستهٔ وردپرس ابزاری کاربردی برای واکشی قالب‌های بلاکی (Block Templates و Template Parts) است. این تابع مخصوص سایت‌های مبتنی بر Full Site Editing (FSE) و تم‌های بلاکی است، و به شما اجازه می‌دهد قالب‌هایی که در دیتابیس یا تم ثبت شده‌اند را برنامه‌نویسی‌ شده دریافت و پردازش کنید.

چرا و چه زمانی از get_block_templates() استفاده کنیم؟

  • نمایش لیست قالب‌ها در بخش سفارشی‌سازی یا پنل ادمین
  • ایجاد انتخاب‌گر قالب برای نوع نوشته‌ها یا پست‌تایپ‌های سفارشی
  • آنالیز و پردازش محتوای بلاکی قالب‌ها (مثلاً استخراج بلاک خاص یا بازنویسی محتوا)
  • ادغام قالب‌های ذخیره‌شده در دیتابیس با منطق قالب‌سازی پوسته یا پلاگین

ساختار خروجی و نکات مهم

خروجی تابع معمولاً آرایه‌ای از آبجکت‌های WP_Post است که شامل فیلدهایی مثل post_title، post_content، post_name، post_type و … می‌شود. محتوای قالب‌ها معمولاً به صورت بلوک‌های HTML/JSON (markup) در post_content ذخیره شده‌اند و برای رندر شدن باید با توابعی مثل do_blocks یا render_block پردازش شوند.

آرگومانتوضیح کوتاه
post_typeنوع پست برای یافتن قالب‌ها (مثلاً wp_template، wp_template_part)
themeمی‌توانید تم خاص (slug) یا ‘all’ را مشخص کنید
orderby / orderترتیب مرتب‌سازی نتایج
countتعداد نتایج برگردانده شده

مثال پیشرفته: ایجاد dropdown انتخاب قالب برای نوع نوشته

 'wp_template',
    'theme'     => 'all',
    'count'     => -1,
  ) );

  echo '';
  echo '' . esc_html__( 'انتخاب کنید', 'text-domain' ) . '';
  foreach ( $templates as $t ) {
    printf(
      '%s',
      esc_attr( $t->post_name ),
      selected( get_post_meta( $post->ID, '_selected_template', true ), $t->post_name, false ),
      esc_html( $t->post_title )
    );
  }
  echo '';
}
?>

این مثال نشان می‌دهد چگونه یک متاباکس برای انتخاب قالب در ویرایشگر پست ایجاد کنید. سپس می‌توانید مقدار انتخاب‌شده را ذخیره و در فرانت‌اند یا هنگام رندر پست استفاده کنید.

توضیح فنی کد

در این کد، ما از add_meta_box برای افزودن رابط کاربری استفاده کرده‌ایم. مقدار هر گزینه post_name قالب است که معمولاً شناسه یکتا قالب محسوب می‌شود. برای ذخیره و استفاده باید روال ذخیره‌سازی متادیتا و اعمال قالب در زمان رندر را پیاده‌سازی کنید.

آنالیز محتوا: استخراج بلاک خاص از یک قالب

 'wp_template' ) );

foreach ( $templates as $tpl ) {
  $blocks = parse_blocks( $tpl->post_content );
  foreach ( $blocks as $block ) {
    if ( $block['blockName'] === 'core/cover' ) {
      // پردازش یا نمایش بلاک کاور
      echo render_block( $block );
    }
  }
}
?>

در این مثال از parse_blocks برای تبدیل محتوا به آرایه ساختار یافته‌ای از بلاک‌ها استفاده شده و سپس با چک کردن blockName می‌توان بلاک خاصی را جدا کرد و رندر کرد یا تغییر داد.

توضیح فنی کد

parse_blocks خروجی را به آرایه بلاک‌ها تبدیل می‌کند، render_block برای رندر مستقیم یک بلاک (آرایه‌ای) کاربرد دارد. این روش برای تغییر محتوای بلاک یا استخراج بلاک‌های مشخص بسیار مفید است.

نکات و بهترین روش‌ها

  • همیشه ورودی و خروجی را با توابع امن‌سازی وردپرس (esc_html، esc_attr، wp_kses_post و غیره) محافظت کنید.
  • اگر تغییرات سنگین روی قالب‌ها انجام می‌دهید، از transient یا object cache برای کاهش کوئری‌ها استفاده کنید.
  • دقت کنید که قالب‌ها می‌توانند در فایل‌های تم (theme templates) یا در دیتابیس ذخیره شوند؛ get_block_templates این‌ها را تجمیع می‌کند اما رفتار دقیق بسته به ورژن وردپرس و استراتژی تم می‌تواند متفاوت باشد.
  • برای افزودن قالب‌های جدید برنامه‌نویسی از wp_insert_post با post_type برابر wp_template استفاده کنید (محتوا را به صورت بلوک‌ها قرار دهید).

جمع‌بندی

get_block_templates() یک تابع قدرتمند برای توسعه‌دهندگان تم‌ها و پلاگین‌هایی است که با سیستم قالب بلاکی وردپرس کار می‌کنند. با ترکیب آن با parse_blocks، do_blocks و توابع رندرینگ می‌توانید رابط‌های انتخاب قالب، رندر دینامیک و پردازش‌های پیچیده‌تری را پیاده‌سازی کنید. رعایت مسائل امنیتی و کشینگ عملکرد را بهبود می‌بخشد و تجربهٔ کاربری بهتری فراهم می‌آورد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: