تابع get_block_templates در وردپرس
تابع 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 و توابع رندرینگ میتوانید رابطهای انتخاب قالب، رندر دینامیک و پردازشهای پیچیدهتری را پیادهسازی کنید. رعایت مسائل امنیتی و کشینگ عملکرد را بهبود میبخشد و تجربهٔ کاربری بهتری فراهم میآورد.
آیا این مطلب برای شما مفید بود ؟




