{"id":2433,"date":"2023-12-31T04:47:01","date_gmt":"2023-12-31T04:47:01","guid":{"rendered":"https:\/\/wpconsults.com\/?p=2433"},"modified":"2026-07-04T23:04:13","modified_gmt":"2026-07-04T23:04:13","slug":"wordpress-anmeldeseite-manuell-anpassen","status":"publish","type":"post","link":"https:\/\/www.wpconsults.com\/de\/customize-wordpress-login-page-manually\/","title":{"rendered":"Customize WordPress Login Page Manually (No Plugin)"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Every WordPress site ships with the same login page: the WordPress logo, a gray background, and a blue button that has nothing to do with your brand. You do not need a plugin to change any of it, because a few small snippets replace the logo, restyle the form, and clean up the details most people never touch.<\/p>\n\n<p class=\"wp-block-paragraph\">I will walk you through the exact code I use to customize the WordPress login page manually, piece by piece. You will know what each line does instead of pasting one mystery blob and hoping.<\/p>\n\n\n<div class=\"wp-block-group wpc-takeaways is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Wichtigste Erkenntnisse<\/h3>\n<ul class=\"wp-block-list\"><li>Almost everything hangs off one hook, <code>login_enqueue_scripts<\/code>, which prints your CSS on wp-login.php and nowhere else.<\/li><li>Your logo replaces the WordPress one with a small CSS block, and two filters (<code>login_headerurl<\/code> und <code>login_headertext<\/code>) point the logo link at your site instead of wordpress.org.<\/li><li>Put the snippets in a child theme&#8217;s functions.php or a code-snippets plugin, and test from a second browser so a typo cannot lock you out.<\/li><li>The browser tab says &#8220;WordPress&#8221; by default; the <code>login_title<\/code> filter removes it, which is the finishing touch most tutorials skip.<\/li><li>Plugins like LoginPress do the same job from a panel; the code route simply gives you the same result with nothing new to update.<\/li><\/ul>\n<\/div>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:15px 15px 0px 0px rgba(160, 152, 255, 0.31);}.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-contents-title{font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette1, #3182CE);font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-content-wrap{border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id7066_f7400a-9c .kb-table-of-content-wrap{border-top:1px solid var(--global-palette10, #3182CE);border-right:1px solid var(--global-palette10, #3182CE);border-bottom:1px solid var(--global-palette10, #3182CE);border-left:1px solid var(--global-palette10, #3182CE);}}<\/style>\n\n<h2 class=\"wp-block-heading\">Why customize the WordPress login page at all<\/h2>\n\n<p class=\"wp-block-paragraph\">On a solo blog where you are the only person logging in, the default page is honestly fine, and I would not spend an afternoon on it. The moment other people see that screen, though, it starts doing brand work: client dashboards, membership sites, WooCommerce stores with customer accounts, and multi-author blogs all put the login page in front of users who are not you.<\/p>\n\n<p class=\"wp-block-paragraph\">A login page with your logo and colors reads as a finished product, while the default reads as a template someone never got around to. That is a small trust signal, but <strong>trust signals stack<\/strong>, and this one costs you about fifteen minutes.<\/p>\n\n<h2 class=\"wp-block-heading\">Where the login page code goes (and where it should not)<\/h2>\n\n<p class=\"wp-block-paragraph\">Every snippet below goes into your child theme&#8217;s <code>funktionen.php<\/code>, or into a code-snippets plugin if you want a safety net that disables a broken snippet instead of white-screening the site. It is the same home I use for other small tweaks, like <a href=\"https:\/\/www.wpconsults.com\/de\/doppelte-postseiten-in-wordpress\/\">adding a duplicate-post link without a plugin<\/a>. Never put them in the parent theme, because the next theme update silently wipes your work.<\/p>\n\n<p class=\"wp-block-paragraph\">One warning from experience: <strong>test while you stay logged in from a second browser<\/strong> or a private window. The login page is the one place where a stray syntax error can genuinely lock you out, and if that ever happens you can still <a href=\"https:\/\/www.wpconsults.com\/de\/wordpress-passwort-vom-dateimanager-zurucksetzen\/\">reset your password from the file manager<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">Replace the WordPress logo with your own<\/h2>\n\n<p class=\"wp-block-paragraph\">The logo is just a CSS background image on the <code>#login h1 a<\/code> element, so replacing it takes one style block. WordPress gives us the <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener nofollow\">login_enqueue_scripts<\/a> hook, which prints whatever you hang on it into the head of the login page only, so none of this CSS loads anywhere else on your site.<\/p>\n\n<pre class=\"wp-block-code\"><code>function wpc_login_logo() { ?&gt;\n    &lt;style&gt;\n        #login h1 a {\n            background-image: url('&lt;?php echo esc_url( get_stylesheet_directory_uri() ); ?&gt;\/images\/login-logo.png');\n            background-size: contain;\n            background-position: center;\n            width: 240px;\n            height: 84px;\n        }\n    &lt;\/style&gt;\n&lt;?php }\nadd_action( 'login_enqueue_scripts', 'wpc_login_logo' );<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Upload your logo to an <code>images<\/code> folder inside your child theme, or paste a full media-library URL instead, then set the width and height to roughly match its proportions. <code>background-size: contain<\/code> keeps the logo sharp inside whatever box you choose, so you are not fighting cropping.<\/p>\n\n<h2 class=\"wp-block-heading\">Point the login logo at your site, not WordPress.org<\/h2>\n\n<p class=\"wp-block-paragraph\">By default the logo links to wordpress.org and the accessible hover text says &#8220;Powered by WordPress&#8221;, which is a strange look on a branded client login. Two small filters fix both:<\/p>\n\n<pre class=\"wp-block-code\"><code>add_filter( 'login_headerurl', function () {\n    return home_url();\n} );\n\nadd_filter( 'login_headertext', function () {\n    return get_bloginfo( 'name' );\n} );<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">The first filter, <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headerurl\/\" target=\"_blank\" rel=\"noopener nofollow\">login_headerurl<\/a>, swaps the link target for your own homepage, and the second replaces the text with your site name. They are one-liners, but they are the difference between a white-labeled page and one that still points people at somebody else&#8217;s website.<\/p>\n\n<h2 class=\"wp-block-heading\">Style the login background, form, and button<\/h2>\n\n<p class=\"wp-block-paragraph\">With the logo sorted, the rest is plain CSS pasted into the same style block from the first snippet. These selectors cover the pieces people actually want to change: the page background, the form card, the button, and the links under the form.<\/p>\n\n<pre class=\"wp-block-code\"><code>body.login {\n    background-color: #f6f5ff;\n}\n.login form {\n    border-radius: 10px;\n    border: 1px solid #e4e0f5;\n    box-shadow: 0 8px 24px rgba(103, 61, 229, 0.08);\n}\n.wp-core-ui .button-primary {\n    background: #673de5;\n    border-color: #673de5;\n}\n.login #backtoblog a,\n.login #nav a {\n    color: #4c4670;\n}<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Swap the colors for your own palette and you are done. <code>.wp-core-ui .button-primary<\/code> is the log-in button itself, and the last block styles the &#8220;Lost your password?&#8221; and &#8220;Back to site&#8221; links; keep the button contrast strong, because this is a form people use half-awake at 7 am.<\/p>\n\n<h2 class=\"wp-block-heading\">Bonus: remove &#8220;WordPress&#8221; from the login tab title<\/h2>\n\n<p class=\"wp-block-paragraph\">Open your login page and look at the browser tab: on a default install the title ends with &#8220;WordPress&#8221;. The <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_title\/\" target=\"_blank\" rel=\"noopener nofollow\">login_title<\/a> filter controls that whole string, so you can rebuild it around your own site name instead:<\/p>\n\n<pre class=\"wp-block-code\"><code>add_filter( 'login_title', function ( $login_title, $title ) {\n    return $title . ' | ' . get_bloginfo( 'name' );\n}, 10, 2 );<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"60\" src=\"https:\/\/wpconsults.com\/wp-content\/uploads\/2023\/12\/image-35.png\" alt=\"Browser tab title after removing the WordPress text from the login page\" class=\"wp-image-2449\" srcset=\"https:\/\/www.wpconsults.com\/wp-content\/uploads\/2023\/12\/image-35.png 585w, https:\/\/www.wpconsults.com\/wp-content\/uploads\/2023\/12\/image-35-300x31.png 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">The filter receives the full title plus the page-specific part (<code>$title<\/code>, usually &#8220;Log In&#8221;), so returning your own combination drops the trailing &#8220;WordPress&#8221; cleanly. It is a two-minute change, and it is exactly the detail a client notices without being able to say why the page suddenly feels finished.<\/p>\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>What you are changing<\/th><th>Hook or filter<\/th><th>How it works<\/th><\/tr><\/thead><tbody><tr><td>Logo image<\/td><td>login_enqueue_scripts<\/td><td>CSS background image on #login h1 a<\/td><\/tr><tr><td>Logo link and hover text<\/td><td>login_headerurl, login_headertext<\/td><td>Two one-line PHP filters<\/td><\/tr><tr><td>Background, form, and button styling<\/td><td>login_enqueue_scripts<\/td><td>Plain CSS in the same style block<\/td><\/tr><tr><td>Browser tab title<\/td><td>login_title<\/td><td>PHP filter rebuilding the title string<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">The four login-page changes in this guide and the WordPress hook or filter each one hangs off.<\/figcaption><\/figure>\n\n\n<p class=\"wp-block-paragraph\">One thing this styling does not do is make the login page more secure; the URL is still wp-login.php and bots still find it every day. If that is your next itch, I cover two safe approaches in <a href=\"https:\/\/www.wpconsults.com\/de\/wp-admin-url-ohne-plugin-andern\/\">changing the wp-admin URL without a plugin<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">So, should you customize the login page by hand or with a plugin?<\/h2>\n\n<p class=\"wp-block-paragraph\">Hand-coding wins for me here, and not because plugins like LoginPress do a bad job; they are genuinely convenient, with live previews and ready-made templates. The login page is just a <strong>set-and-forget change<\/strong>, and carrying a whole plugin with its updates and upsell screens to hold four small snippets is more maintenance than the job deserves.<\/p>\n\n<p class=\"wp-block-paragraph\">If you are not comfortable in functions.php, use the plugin without guilt, because a branded login page beats a default one either way. But if you can paste code, the manual route gives you the same result with nothing new to update, and you now understand every line of it.<\/p>\n\n\n<div class=\"wp-block-group wpc-post-cta is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Stuck customizing your login page?<\/h3>\n<p class=\"wp-block-paragraph\">If a snippet is not behaving or you want the login page matched to your brand properly, feel free to <a href=\"https:\/\/www.wpconsults.com\/de\/arbeit-mit-wpconsults\/\">kontaktieren Sie uns<\/a> oder <a href=\"mailto:info.wpconsults@gmail.com\">E-Mail<\/a> and I will point you in the right direction.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group wpc-changelog is-layout-flow wp-block-group-is-layout-flow\" id=\"article-update-logs\">\n<h2 class=\"wp-block-heading\">\u00c4nderungsprotokolle<\/h2>\n<p class=\"wp-block-paragraph\"><strong>02 Jul 2026<\/strong><\/p>\n<ul class=\"wp-block-list\"><li>Rewrote the guide around cleaner snippets with plain explanations of each hook and filter, added the logo-link fix and the browser-tab cleanup, and refreshed the styling examples.<\/li><\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>You can customize the WordPress login page manually with a few small snippets: your own logo, colors, and logo link, no plugin required. Here is the exact code I use, explained piece by piece.<\/p>","protected":false},"author":1,"featured_media":7432,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kb_optimizer_status":0,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","rank_math_title":"Customize WordPress Login Page Manually (No Plugin)","rank_math_description":"Customize the WordPress login page manually: replace the logo, restyle the form, and clean up the tab title with a few small snippets, no plugin required.","rank_math_focus_keyword":"customize wordpress login page manually","_colophon_preset":"regular","_colophon_fc_on":"","_colophon_edited_on":"","footnotes":""},"categories":[7],"tags":[64],"class_list":["post-2433","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-tips-tutorials","tag-without-plugin-series"],"_links":{"self":[{"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/posts\/2433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/comments?post=2433"}],"version-history":[{"count":3,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/posts\/2433\/revisions"}],"predecessor-version":[{"id":7602,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/posts\/2433\/revisions\/7602"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/media\/7432"}],"wp:attachment":[{"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/media?parent=2433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/categories?post=2433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wpconsults.com\/de\/wp-json\/wp\/v2\/tags?post=2433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}