{"id":803,"date":"2025-12-10T19:16:36","date_gmt":"2025-12-11T01:16:36","guid":{"rendered":"https:\/\/kop.lat\/blog\/?p=803"},"modified":"2025-12-10T19:18:34","modified_gmt":"2025-12-11T01:18:34","slug":"how-to-create-a-wordpress-theme-from-scratch-using-bootstrap-css","status":"publish","type":"post","link":"https:\/\/kop.lat\/blog\/how-to-create-a-wordpress-theme-from-scratch-using-bootstrap-css\/","title":{"rendered":"How to create a WordPress Theme from Scratch Using Bootstrap CSS"},"content":{"rendered":"\n<p>This guide covers manually creating a basic WordPress theme using code, incorporating Bootstrap CSS for responsive design. Assume a local or hosted WordPress installation is available. All files will be placed in a new theme directory under <code>\/wp-content\/themes\/<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Prepare the theme directory<\/h3>\n\n\n\n<p>Access the WordPress installation directory (e.g., via file manager, FTP, or terminal).<br>Create a new folder for the theme:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd wp-content\/themes\/\nmkdir my-bootstrap-theme\ncd my-bootstrap-theme<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Create the main stylesheet (style.css)<\/h3>\n\n\n\n<p>This file defines the theme metadata and can include custom CSS.<br>Create and edit <code>style.css<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\nTheme Name: My Bootstrap Theme\nTheme URI: https:\/\/example.com\/my-bootstrap-theme\nAuthor: Your Name\nAuthor URI: https:\/\/example.com\nDescription: A basic WordPress theme using Bootstrap CSS.\nVersion: 1.0\nRequires at least: 6.0\nTested up to: 6.6\nRequires PHP: 7.4\nText Domain: my-bootstrap-theme\n*\/\n\nbody {\n    font-family: sans-serif;\n}<\/code><\/pre>\n\n\n\n<p>The comment block at the top is required for WordPress to recognize the theme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Create the main template file (index.php)<\/h3>\n\n\n\n<p>This serves as the fallback template for displaying content.<br>Create and edit <code>index.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php get_header(); ?&gt;\n\n&lt;div class=\"container\"&gt;\n    &lt;div class=\"row\"&gt;\n        &lt;div class=\"col-md-8\"&gt;\n            &lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;\n                &lt;article id=\"post-&lt;?php the_ID(); ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n                    &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n                    &lt;div class=\"entry-content\"&gt;\n                        &lt;?php the_content(); ?&gt;\n                    &lt;\/div&gt;\n                &lt;\/article&gt;\n            &lt;?php endwhile; else : ?&gt;\n                &lt;p&gt;No content found.&lt;\/p&gt;\n            &lt;?php endif; ?&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"col-md-4\"&gt;\n            &lt;?php get_sidebar(); ?&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;?php get_footer(); ?&gt;<\/code><\/pre>\n\n\n\n<p>This uses Bootstrap&#8217;s grid system (container, row, col-md-* classes) for layout.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Create the functions file (functions.php)<\/h3>\n\n\n\n<p>This file handles theme setup, including enqueuing Bootstrap CSS and other assets.<br>Create and edit <code>functions.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nfunction my_bootstrap_theme_setup() {\n    add_theme_support('title-tag');\n    add_theme_support('post-thumbnails');\n    add_theme_support('html5', array('search-form', 'comment-form', 'comment-list', 'gallery', 'caption'));\n    register_nav_menus(array('primary' =&gt; 'Primary Menu'));\n}\n\nadd_action('after_setup_theme', 'my_bootstrap_theme_setup');\n\nfunction my_bootstrap_theme_enqueue_styles() {\n    \/\/ Enqueue Bootstrap CSS from CDN\n    wp_enqueue_style('bootstrap-css', 'https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/css\/bootstrap.min.css', array(), '5.3.3');\n\n    \/\/ Enqueue theme's style.css (depends on Bootstrap)\n    wp_enqueue_style('my-bootstrap-theme-style', get_stylesheet_uri(), array('bootstrap-css'), '1.0');\n\n    \/\/ Optional: Enqueue Bootstrap JS if needed (requires Popper.js)\n    wp_enqueue_script('popper-js', 'https:\/\/cdn.jsdelivr.net\/npm\/@popperjs\/core@2.11.8\/dist\/umd\/popper.min.js', array(), '2.11.8', true);\n    wp_enqueue_script('bootstrap-js', 'https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.3\/dist\/js\/bootstrap.min.js', array('popper-js'), '5.3.3', true);\n}\n\nadd_action('wp_enqueue_scripts', 'my_bootstrap_theme_enqueue_styles');\n\n?&gt;<\/code><\/pre>\n\n\n\n<p>This loads Bootstrap CSS and optionally JS from a CDN.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Create the header template (header.php)<\/h3>\n\n\n\n<p>This file contains the HTML head and opening body elements.<br>Create and edit <code>header.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html &lt;?php language_attributes(); ?&gt;&gt;\n&lt;head&gt;\n    &lt;meta charset=\"&lt;?php bloginfo('charset'); ?&gt;\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n    &lt;?php wp_head(); ?&gt;\n&lt;\/head&gt;\n&lt;body &lt;?php body_class(); ?&gt;&gt;\n    &lt;header&gt;\n        &lt;nav class=\"navbar navbar-expand-lg navbar-light bg-light\"&gt;\n            &lt;div class=\"container\"&gt;\n                &lt;a class=\"navbar-brand\" href=\"&lt;?php echo home_url(); ?&gt;\"&gt;&lt;?php bloginfo('name'); ?&gt;&lt;\/a&gt;\n                &lt;button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNav\" aria-controls=\"navbarNav\" aria-expanded=\"false\" aria-label=\"Toggle navigation\"&gt;\n                    &lt;span class=\"navbar-toggler-icon\"&gt;&lt;\/span&gt;\n                &lt;\/button&gt;\n                &lt;div class=\"collapse navbar-collapse\" id=\"navbarNav\"&gt;\n                    &lt;?php\n                    wp_nav_menu(array(\n                        'theme_location' =&gt; 'primary',\n                        'menu_class' =&gt; 'navbar-nav ms-auto',\n                        'container' =&gt; false,\n                        'fallback_cb' =&gt; false,\n                        'walker' =&gt; new Bootstrap_Nav_Walker(), \/\/ Optional: Custom walker for Bootstrap menu\n                    ));\n                    ?&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/nav&gt;\n    &lt;\/header&gt;<\/code><\/pre>\n\n\n\n<p>This uses Bootstrap&#8217;s navbar component.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. Create the footer template (footer.php)<\/h3>\n\n\n\n<p>This closes the body and includes wp_footer().<br>Create and edit <code>footer.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &lt;footer class=\"bg-light py-3\"&gt;\n        &lt;div class=\"container\"&gt;\n            &lt;p class=\"text-center\"&gt;&amp;copy; &lt;?php echo date('Y'); ?&gt; &lt;?php bloginfo('name'); ?&gt;. All rights reserved.&lt;\/p&gt;\n        &lt;\/div&gt;\n    &lt;\/footer&gt;\n    &lt;?php wp_footer(); ?&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. (Optional) Create a sidebar template (sidebar.php)<\/h3>\n\n\n\n<p>For widget areas.<br>Create and edit <code>sidebar.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;aside&gt;\n    &lt;?php if (is_active_sidebar('sidebar-1')) : ?&gt;\n        &lt;?php dynamic_sidebar('sidebar-1'); ?&gt;\n    &lt;?php endif; ?&gt;\n&lt;\/aside&gt;<\/code><\/pre>\n\n\n\n<p>Register the sidebar in <code>functions.php<\/code> by adding:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function my_bootstrap_theme_widgets_init() {\n    register_sidebar(array(\n        'name' =&gt; 'Main Sidebar',\n        'id' =&gt; 'sidebar-1',\n        'before_widget' =&gt; '&lt;div class=\"widget %2$s\"&gt;',\n        'after_widget' =&gt; '&lt;\/div&gt;',\n        'before_title' =&gt; '&lt;h3&gt;',\n        'after_title' =&gt; '&lt;\/h3&gt;',\n    ));\n}\nadd_action('widgets_init', 'my_bootstrap_theme_widgets_init');<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. (Optional) Add a custom Bootstrap nav walker<\/h3>\n\n\n\n<p>For better menu integration, create <code>class-bootstrap-nav-walker.php<\/code> and include it in <code>functions.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>require_once get_template_directory() . '\/class-bootstrap-nav-walker.php';<\/code><\/pre>\n\n\n\n<p>Content of <code>class-bootstrap-nav-walker.php<\/code> (extend WP&#8217;s Walker_Nav_Menu):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Bootstrap_Nav_Walker extends Walker_Nav_Menu {\n    \/\/ Custom walker code for Bootstrap 5 navbar (search for \"Bootstrap 5 WordPress nav walker\" for full implementation).\n}<\/code><\/pre>\n\n\n\n<p>Refer to online resources for a complete Bootstrap nav walker class.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9. Activate the theme<\/h3>\n\n\n\n<p>Log in to the WordPress admin dashboard (<code>\/wp-admin<\/code>).<br>Navigate to <strong>Appearance \u2192 Themes<\/strong>.<br>Select and activate &#8220;My Bootstrap Theme&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10. Test and customize<\/h3>\n\n\n\n<p>View the site to ensure Bootstrap styles apply.<br>Add more template files (e.g., single.php, page.php) as needed.<br>Customize CSS in <code>style.css<\/code> or add custom JS in a new file enqueued via <code>functions.php<\/code>.<\/p>\n\n\n\n<p>The theme is now functional with Bootstrap integration.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide covers manually creating a basic WordPress theme using code, incorporating Bootstrap CSS for responsive design. Assume a local or hosted WordPress installation is available. All files will be placed in a new theme directory under \/wp-content\/themes\/. 1. Prepare the theme directory Access the WordPress installation directory (e.g., via file manager, FTP, or terminal).Create [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":463,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,145],"tags":[17,146,147],"_links":{"self":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/803"}],"collection":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/comments?post=803"}],"version-history":[{"count":1,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/803\/revisions"}],"predecessor-version":[{"id":804,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/803\/revisions\/804"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media\/463"}],"wp:attachment":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media?parent=803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/categories?post=803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/tags?post=803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}