
We are going to modify our header so that it can display either an uploaded logo or text (the site’s name).
header.php
<!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo('charset'); ?>"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php wp_title(); ?></title> <?php wp_head(); ?> </head> <body <?php body_class(); ?>> <header class="bg-dark text-white py-4"> <div class="container"> <div class="row"> <div class="col-md-6"> <?php // Get the customizable logo $custom_logo_id = get_theme_mod('custom_logo'); $logo = wp_get_attachment_image_src($custom_logo_id, 'full'); // If there is a custom logo, display the image. If not, display the site title. if ($custom_logo_id) { echo '<img src="' . esc_url($logo[0]) . '" alt="' . get_bloginfo('name') . '" class="img-fluid">'; } else { echo '<h1 class="mb-0">' . '<a href="' . home_url() . '" class="text-white">' . get_bloginfo('name') . '</a>' . '</h1>'; echo '<p class="mb-0">' . get_bloginfo('description') . '</p>'; } ?> </div> <div class="col-md-6 d-flex justify-content-end align-items-center"> <?php wp_nav_menu(array( 'theme_location' => 'main-menu', 'menu_class' => 'nav justify-content-end', 'container' => false, )); ?> </div> </div> </div> </header>
This code allows us to differentiate between logo or text based on the user:
// If there is a custom logo, display the image. If not, display the site title. if ($custom_logo_id) { echo '<img src="' . esc_url($logo[0]) . '" alt="' . get_bloginfo('name') . '" class="img-fluid">'; } else { echo '<h1 class="mb-0">' . '<a href="' . home_url() . '" class="text-white">' . get_bloginfo('name') . '</a>' . '</h1>'; echo '<p class="mb-0">' . get_bloginfo('description') . '</p>'; }
We add the CSS:
style.css
/* Header Styles */ header { position: relative; } header h1 a { text-decoration: none; color: #ffffff; } header p { color: #e0e0e0; } /* Navigation Styles */ .navbar-dark .navbar-nav .nav-link { color: #ffffff; } .navbar-dark .navbar-nav .nav-link:hover { color: #f8f9fa; } /* Main Content Styles */ .container { margin-top: 50px; } /* Footer Styles */ footer { background-color: #343a40; color: #ffffff; padding: 30px 0; position: absolute; bottom: 0; width: 100%; }
And now let’s create the action that will allow us to upload the logo:
functions.php
function theme_setup() { add_theme_support('custom-logo'); } add_action('after_setup_theme', 'theme_setup');
So, this is the result:

