একটি widget area (WordPress API-তে "sidebar"-ও বলা হয়, পেজে আসলে কোথায় বসানো তা নির্বিশেষে) একটি theme define করা একটি region, যা একজন editor পরে WordPress admin থেকে content block দিয়ে পূরণ করতে পারে — কোনো কোড না ছুঁয়ে।
// functions.php
function wgh_register_sidebars() {
register_sidebar([
'name' => 'Blog Sidebar',
'id' => 'blog-sidebar',
'before_widget' => '<div class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
]);
}
add_action('widgets_init', 'wgh_register_sidebars');Area-তে আসলে কোনো widget বসানো আছে কিনা তার একটি check-এ wrap করা — একটি খালি sidebar একটি খালি wrapper element render করা উচিত না।
<?php if (is_active_sidebar('blog-sidebar')) : ?>
<aside class="sidebar">
<?php dynamic_sidebar('blog-sidebar'); ?>
</aside>
<?php endif; ?>একজন editor এই area-তে drag করা প্রতিটি widget স্বয়ংক্রিয়ভাবে এই চারটি setting দিয়ে define করা HTML-এ wrap হয় — theme-এর আগে থেকে কোন widget ব্যবহার হবে তা জানা ছাড়াই একটি সামঞ্জস্যপূর্ণ container আর heading structure।
function wgh_register_sidebars() {
register_sidebar(['name' => 'Blog Sidebar', 'id' => 'blog-sidebar']);
register_sidebar(['name' => 'Footer Column 1', 'id' => 'footer-1']);
register_sidebar(['name' => 'Footer Column 2', 'id' => 'footer-2']);
}
add_action('widgets_init', 'wgh_register_sidebars');Widget আর block editor
WordPress 5.8 থেকে, একটি widget area block-ও রাখতে পারে (post content-এ ব্যবহৃত একই block editor), শুধু পুরনো classic widget না — register_sidebar() নিজে দুই ক্ষেত্রেই অপরিবর্তিত।